summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--framework/src/domain/mime/partmodel.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/framework/src/domain/mime/partmodel.cpp b/framework/src/domain/mime/partmodel.cpp
index c6d7dcf5..eeeb391d 100644
--- a/framework/src/domain/mime/partmodel.cpp
+++ b/framework/src/domain/mime/partmodel.cpp
@@ -32,7 +32,7 @@ public:
32 PartModelPrivate(PartModel *q_ptr, const std::shared_ptr<MimeTreeParser::ObjectTreeParser> &parser); 32 PartModelPrivate(PartModel *q_ptr, const std::shared_ptr<MimeTreeParser::ObjectTreeParser> &parser);
33 ~PartModelPrivate(); 33 ~PartModelPrivate();
34 34
35 void createTree(); 35 void findEncapsulated(const MimeTreeParser::EncapsulatedRfc822MessagePart::Ptr &e);
36 PartModel *q; 36 PartModel *q;
37 QVector<MimeTreeParser::MessagePartPtr> mParts; 37 QVector<MimeTreeParser::MessagePartPtr> mParts;
38 QHash<MimeTreeParser::MessagePart*, QVector<MimeTreeParser::MessagePartPtr>> mEncapsulatedParts; 38 QHash<MimeTreeParser::MessagePart*, QVector<MimeTreeParser::MessagePartPtr>> mEncapsulatedParts;
@@ -45,17 +45,25 @@ PartModelPrivate::PartModelPrivate(PartModel *q_ptr, const std::shared_ptr<MimeT
45 , mParser(parser) 45 , mParser(parser)
46{ 46{
47 mParts = mParser->collectContentParts(); 47 mParts = mParser->collectContentParts();
48 qWarning() << "Collected content parts: " << mParts.size();
49 for (auto p : mParts) { 48 for (auto p : mParts) {
50 if (auto e = p.dynamicCast<MimeTreeParser::EncapsulatedRfc822MessagePart>()) { 49 if (auto e = p.dynamicCast<MimeTreeParser::EncapsulatedRfc822MessagePart>()) {
51 mEncapsulatedParts[e.data()] = mParser->collectContentParts(e); 50 findEncapsulated(e);
52 for (auto subPart : mEncapsulatedParts[e.data()]) {
53 mParents[subPart.data()] = e.data();
54 }
55 } 51 }
56 } 52 }
57} 53}
58 54
55//Recursively find encapsulated messages
56void PartModelPrivate::findEncapsulated(const MimeTreeParser::EncapsulatedRfc822MessagePart::Ptr &e)
57{
58 mEncapsulatedParts[e.data()] = mParser->collectContentParts(e);
59 for (auto subPart : mEncapsulatedParts[e.data()]) {
60 mParents[subPart.data()] = e.data();
61 if (auto encapsulatedSub = subPart.dynamicCast<MimeTreeParser::EncapsulatedRfc822MessagePart>()) {
62 findEncapsulated(encapsulatedSub);
63 }
64 }
65};
66
59PartModelPrivate::~PartModelPrivate() 67PartModelPrivate::~PartModelPrivate()
60{ 68{
61} 69}