diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-06-07 22:17:12 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-06-07 22:17:12 +0200 |
commit | 23132b14e9bf3e1ec1f7720bbe28a2051508bd0f (patch) | |
tree | c5989b95fb805b7b770453a01fbff74fc76e43f0 /framework/src/domain/mime/mimetreeparser/objecttreeparser.cpp | |
parent | e683f8ebdadd5bfc5a32d6be126c46ec2c3a26e5 (diff) | |
download | kube-23132b14e9bf3e1ec1f7720bbe28a2051508bd0f.tar.gz kube-23132b14e9bf3e1ec1f7720bbe28a2051508bd0f.zip |
Encapsulated parts
Diffstat (limited to 'framework/src/domain/mime/mimetreeparser/objecttreeparser.cpp')
-rw-r--r-- | framework/src/domain/mime/mimetreeparser/objecttreeparser.cpp | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/framework/src/domain/mime/mimetreeparser/objecttreeparser.cpp b/framework/src/domain/mime/mimetreeparser/objecttreeparser.cpp index b137be87..8d8ddf12 100644 --- a/framework/src/domain/mime/mimetreeparser/objecttreeparser.cpp +++ b/framework/src/domain/mime/mimetreeparser/objecttreeparser.cpp | |||
@@ -190,20 +190,17 @@ KMime::Content *ObjectTreeParser::find(const std::function<bool(KMime::Content * | |||
190 | * Filter to avoid evaluating a subtree. | 190 | * Filter to avoid evaluating a subtree. |
191 | * Select parts to include it in the result set. Selecting a part in a branch will keep any parent parts from being selected. | 191 | * Select parts to include it in the result set. Selecting a part in a branch will keep any parent parts from being selected. |
192 | */ | 192 | */ |
193 | static QVector<MessagePart::Ptr> collect(MessagePart::Ptr start, const std::function<bool(const MessagePartPtr &)> &filter, const std::function<bool(const MessagePartPtr &)> &select) | 193 | static QVector<MessagePart::Ptr> collect(MessagePart::Ptr start, const std::function<bool(const MessagePartPtr &)> &evaluateSubtree, const std::function<bool(const MessagePartPtr &)> &select) |
194 | { | 194 | { |
195 | MessagePartPtr ptr = start.dynamicCast<MessagePart>(); | 195 | MessagePartPtr ptr = start.dynamicCast<MessagePart>(); |
196 | Q_ASSERT(ptr); | 196 | Q_ASSERT(ptr); |
197 | if (!filter(ptr)) { | ||
198 | return {}; | ||
199 | } | ||
200 | |||
201 | QVector<MessagePart::Ptr> list; | 197 | QVector<MessagePart::Ptr> list; |
202 | if (ptr) { | 198 | if (evaluateSubtree(ptr)) { |
203 | for (const auto &p: ptr->subParts()) { | 199 | for (const auto &p: ptr->subParts()) { |
204 | list << ::collect(p, filter, select); | 200 | list << ::collect(p, evaluateSubtree, select); |
205 | } | 201 | } |
206 | } | 202 | } |
203 | |||
207 | //Don't consider this part if we already selected a subpart | 204 | //Don't consider this part if we already selected a subpart |
208 | if (list.isEmpty()) { | 205 | if (list.isEmpty()) { |
209 | if (select(ptr)) { | 206 | if (select(ptr)) { |
@@ -213,14 +210,25 @@ static QVector<MessagePart::Ptr> collect(MessagePart::Ptr start, const std::func | |||
213 | return list; | 210 | return list; |
214 | } | 211 | } |
215 | 212 | ||
216 | QVector<MessagePart::Ptr> ObjectTreeParser::collectContentParts() | 213 | QVector<MessagePartPtr> ObjectTreeParser::collectContentParts() |
217 | { | 214 | { |
218 | QVector<MessagePart::Ptr> contentParts = ::collect(mParsedPart, | 215 | return collectContentParts(mParsedPart); |
219 | [] (const MessagePartPtr &part) { | 216 | } |
220 | // return p->type() != "EncapsulatedPart"; | 217 | |
218 | QVector<MessagePart::Ptr> ObjectTreeParser::collectContentParts(MessagePart::Ptr start) | ||
219 | { | ||
220 | return ::collect(start, | ||
221 | [start] (const MessagePartPtr &part) { | ||
222 | //Ignore the top-level | ||
223 | if (start.data() == part.data()) { | ||
224 | return true; | ||
225 | } | ||
226 | if (auto e = part.dynamicCast<MimeTreeParser::EncapsulatedRfc822MessagePart>()) { | ||
227 | return false; | ||
228 | } | ||
221 | return true; | 229 | return true; |
222 | }, | 230 | }, |
223 | [] (const MessagePartPtr &part) { | 231 | [start] (const MessagePartPtr &part) { |
224 | if (dynamic_cast<MimeTreeParser::AttachmentMessagePart*>(part.data())) { | 232 | if (dynamic_cast<MimeTreeParser::AttachmentMessagePart*>(part.data())) { |
225 | return false; | 233 | return false; |
226 | } else if (const auto text = dynamic_cast<MimeTreeParser::TextMessagePart*>(part.data())) { | 234 | } else if (const auto text = dynamic_cast<MimeTreeParser::TextMessagePart*>(part.data())) { |
@@ -233,6 +241,11 @@ QVector<MessagePart::Ptr> ObjectTreeParser::collectContentParts() | |||
233 | return true; | 241 | return true; |
234 | } else if (dynamic_cast<MimeTreeParser::HtmlMessagePart*>(part.data())) { | 242 | } else if (dynamic_cast<MimeTreeParser::HtmlMessagePart*>(part.data())) { |
235 | return true; | 243 | return true; |
244 | } else if (dynamic_cast<MimeTreeParser::EncapsulatedRfc822MessagePart*>(part.data())) { | ||
245 | if (start.data() == part.data()) { | ||
246 | return false; | ||
247 | } | ||
248 | return true; | ||
236 | } else if (const auto enc = dynamic_cast<MimeTreeParser::EncryptedMessagePart*>(part.data())) { | 249 | } else if (const auto enc = dynamic_cast<MimeTreeParser::EncryptedMessagePart*>(part.data())) { |
237 | if (enc->error()) { | 250 | if (enc->error()) { |
238 | return true; | 251 | return true; |
@@ -247,7 +260,6 @@ QVector<MessagePart::Ptr> ObjectTreeParser::collectContentParts() | |||
247 | } | 260 | } |
248 | return false; | 261 | return false; |
249 | }); | 262 | }); |
250 | return contentParts; | ||
251 | } | 263 | } |
252 | 264 | ||
253 | QVector<MessagePart::Ptr> ObjectTreeParser::collectAttachmentParts() | 265 | QVector<MessagePart::Ptr> ObjectTreeParser::collectAttachmentParts() |