diff options
author | Sandro Knauß <sknauss@kde.org> | 2016-10-12 16:41:00 +0200 |
---|---|---|
committer | Sandro Knauß <sknauss@kde.org> | 2016-10-12 16:41:00 +0200 |
commit | b40e6c476e54c5dab834c4d01936d1f7bc33c60e (patch) | |
tree | bfff8471fa2803620a24c3f52909a370a0de480b /framework/domain/mimetreeparser/interface.cpp | |
parent | fb12fcddb68e96580028072daa595d82fb3dd0ab (diff) | |
download | kube-b40e6c476e54c5dab834c4d01936d1f7bc33c60e.tar.gz kube-b40e6c476e54c5dab834c4d01936d1f7bc33c60e.zip |
Make nested mails work with mailviewer
Diffstat (limited to 'framework/domain/mimetreeparser/interface.cpp')
-rw-r--r-- | framework/domain/mimetreeparser/interface.cpp | 50 |
1 files changed, 43 insertions, 7 deletions
diff --git a/framework/domain/mimetreeparser/interface.cpp b/framework/domain/mimetreeparser/interface.cpp index efa0fd40..596dc152 100644 --- a/framework/domain/mimetreeparser/interface.cpp +++ b/framework/domain/mimetreeparser/interface.cpp | |||
@@ -36,14 +36,24 @@ | |||
36 | class MailMimePrivate | 36 | class MailMimePrivate |
37 | { | 37 | { |
38 | public: | 38 | public: |
39 | KMime::Content *mNode; | 39 | MailMimePrivate(MailMime *p); |
40 | |||
40 | MailMime *q; | 41 | MailMime *q; |
42 | KMime::Content *mNode; | ||
43 | std::shared_ptr<MailMime> parent; | ||
41 | }; | 44 | }; |
42 | 45 | ||
46 | MailMimePrivate::MailMimePrivate(MailMime* p) | ||
47 | : q(p) | ||
48 | , mNode(nullptr) | ||
49 | , parent(nullptr) | ||
50 | { | ||
51 | } | ||
52 | |||
53 | |||
43 | MailMime::MailMime() | 54 | MailMime::MailMime() |
44 | : d(std::unique_ptr<MailMimePrivate>(new MailMimePrivate())) | 55 | : d(std::unique_ptr<MailMimePrivate>(new MailMimePrivate(this))) |
45 | { | 56 | { |
46 | d->q = this; | ||
47 | } | 57 | } |
48 | 58 | ||
49 | bool MailMime::isFirstTextPart() const | 59 | bool MailMime::isFirstTextPart() const |
@@ -54,6 +64,14 @@ bool MailMime::isFirstTextPart() const | |||
54 | return (d->mNode->topLevel()->textContent() == d->mNode); | 64 | return (d->mNode->topLevel()->textContent() == d->mNode); |
55 | } | 65 | } |
56 | 66 | ||
67 | bool MailMime::isFirstPart() const | ||
68 | { | ||
69 | if (!d->mNode || !d->mNode->parent()) { | ||
70 | return false; | ||
71 | } | ||
72 | return (d->mNode->parent()->contents().first() == d->mNode); | ||
73 | } | ||
74 | |||
57 | bool MailMime::isTopLevelPart() const | 75 | bool MailMime::isTopLevelPart() const |
58 | { | 76 | { |
59 | if (!d->mNode) { | 77 | if (!d->mNode) { |
@@ -108,6 +126,15 @@ QMimeType MailMime::mimetype() const | |||
108 | return mimeDb.mimeTypeForName(ct->mimeType()); | 126 | return mimeDb.mimeTypeForName(ct->mimeType()); |
109 | } | 127 | } |
110 | 128 | ||
129 | MailMime::Ptr MailMime::parent() const | ||
130 | { | ||
131 | if (!d->parent) { | ||
132 | d->parent = std::shared_ptr<MailMime>(new MailMime()); | ||
133 | d->parent->d->mNode = d->mNode->parent(); | ||
134 | } | ||
135 | return d->parent; | ||
136 | } | ||
137 | |||
111 | class PartPrivate | 138 | class PartPrivate |
112 | { | 139 | { |
113 | public: | 140 | public: |
@@ -285,6 +312,11 @@ MailMime::Ptr Part::mailMime() const | |||
285 | return d->mailMime(); | 312 | return d->mailMime(); |
286 | } | 313 | } |
287 | 314 | ||
315 | Part *Part::parent() const | ||
316 | { | ||
317 | return d->parent(); | ||
318 | } | ||
319 | |||
288 | class ContentPrivate | 320 | class ContentPrivate |
289 | { | 321 | { |
290 | public: | 322 | public: |
@@ -738,12 +770,16 @@ QVector<Part::Ptr> Parser::collectContentParts() const | |||
738 | } | 770 | } |
739 | 771 | ||
740 | { | 772 | { |
741 | const auto parent = content->parent(); | 773 | auto _mime = content->parent()->mailMime(); |
742 | if (parent) { | 774 | while (_mime) { |
743 | const auto _mime = parent->mailMime(); | ||
744 | if (_mime && (_mime->isTopLevelPart() || _mime->isFirstTextPart())) { | 775 | if (_mime && (_mime->isTopLevelPart() || _mime->isFirstTextPart())) { |
745 | return true; | 776 | return true; |
746 | } | 777 | } |
778 | if (_mime->isFirstPart()) { | ||
779 | _mime = _mime->parent(); | ||
780 | } else { | ||
781 | break; | ||
782 | } | ||
747 | } | 783 | } |
748 | } | 784 | } |
749 | const auto cd = mime->disposition(); | 785 | const auto cd = mime->disposition(); |
@@ -830,4 +866,4 @@ QVector<Part::Ptr> Parser::collect(const Part::Ptr &start, std::function<bool(co | |||
830 | } | 866 | } |
831 | } | 867 | } |
832 | return ret; | 868 | return ret; |
833 | } \ No newline at end of file | 869 | } |