diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-06-04 15:35:24 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-06-04 15:37:00 +0200 |
commit | c6407d7a43541e8e7fb38643601cb06a83b8e305 (patch) | |
tree | c8bcffc01fd710f2bfdabfcb1e7abb1d3560c6c1 | |
parent | 964f0003584a0b745045db75ca6184f54eddd859 (diff) | |
download | kube-c6407d7a43541e8e7fb38643601cb06a83b8e305.tar.gz kube-c6407d7a43541e8e7fb38643601cb06a83b8e305.zip |
Removed extraContents
Seems largely useless now.
The only thing this was planned to be used for is to find the sender of
temporary nodes (which are not linked in the mimetree I suppose),
but that was apparently not yet implemented. Anyways, I think we can
solve this over the parttree.
6 files changed, 12 insertions, 401 deletions
diff --git a/framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.cpp b/framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.cpp index 63e9119e..77f31f19 100644 --- a/framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.cpp +++ b/framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.cpp | |||
@@ -30,182 +30,6 @@ NodeHelperTest::NodeHelperTest() | |||
30 | 30 | ||
31 | } | 31 | } |
32 | 32 | ||
33 | void NodeHelperTest::testPersistentIndex() | ||
34 | { | ||
35 | NodeHelper helper; | ||
36 | |||
37 | KMime::Content *node = new KMime::Content(); | ||
38 | KMime::Content *node2 = new KMime::Content(); | ||
39 | KMime::Content *node2Extra = new KMime::Content(); | ||
40 | KMime::Content *subNode = new KMime::Content(); | ||
41 | KMime::Content *subsubNode = new KMime::Content(), *subsubNode2 = new KMime::Content(); | ||
42 | KMime::Content *node2ExtraSubNode = new KMime::Content(); | ||
43 | KMime::Content *node2ExtraSubsubNode = new KMime::Content(); | ||
44 | KMime::Content *node2ExtraSubsubNode2 = new KMime::Content(); | ||
45 | KMime::Content *extra = new KMime::Content(), *extra2 = new KMime::Content(); | ||
46 | KMime::Content *subExtra = new KMime::Content(); | ||
47 | KMime::Content *subsubExtra = new KMime::Content(); | ||
48 | KMime::Content *subsubExtraNode = new KMime::Content(); | ||
49 | |||
50 | subNode->addContent(subsubNode); | ||
51 | subNode->addContent(subsubNode2); | ||
52 | node->addContent(subNode); | ||
53 | subsubExtra->addContent(subsubExtraNode); | ||
54 | helper.attachExtraContent(node, extra); | ||
55 | helper.attachExtraContent(node, extra2); | ||
56 | helper.attachExtraContent(subNode, subExtra); | ||
57 | helper.attachExtraContent(subsubNode2, subsubExtra); | ||
58 | |||
59 | // This simulates Opaque S/MIME signed and encrypted message with attachment | ||
60 | // (attachment is node2SubsubNode2) | ||
61 | node2Extra->addContent(node2ExtraSubNode); | ||
62 | node2ExtraSubNode->addContent(node2ExtraSubsubNode); | ||
63 | node2ExtraSubNode->addContent(node2ExtraSubsubNode2); | ||
64 | helper.attachExtraContent(node2, node2Extra); | ||
65 | |||
66 | /* all content has a internal first child, so indexes starts at 2 | ||
67 | * node "" | ||
68 | * -> subNode "2" | ||
69 | * -> subsubNode "2.2" | ||
70 | * -> subsubNode2 "2.3" | ||
71 | * | ||
72 | * node "" | ||
73 | * -> extra "e0" | ||
74 | * -> extra2 "e1" | ||
75 | * | ||
76 | * subNode "2" | ||
77 | * -> subExtra "2:e0" | ||
78 | * | ||
79 | * subsubNode2 "2.3" | ||
80 | * -> subsubExtra "2.3:e0" | ||
81 | * -> subsubExtraNode "2.3:e0:2" | ||
82 | * | ||
83 | * node2 "" | ||
84 | * | ||
85 | * node2 "" | ||
86 | * -> node2Extra "e0" | ||
87 | * -> node2ExtraSubNode "e0:2" | ||
88 | * -> node2ExtraSubsubNode "e0:2.2" | ||
89 | * -> node2ExtraSubsubNode2 "e0:2.3" | ||
90 | */ | ||
91 | |||
92 | QCOMPARE(helper.persistentIndex(node), QStringLiteral("")); | ||
93 | QCOMPARE(helper.contentFromIndex(node, QStringLiteral("")), node); | ||
94 | |||
95 | QCOMPARE(helper.persistentIndex(node->contents()[0]), QStringLiteral("1")); | ||
96 | QCOMPARE(helper.contentFromIndex(node, QStringLiteral("1")), node->contents()[0]); | ||
97 | |||
98 | QCOMPARE(helper.persistentIndex(subNode), QStringLiteral("2")); | ||
99 | QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2")), subNode); | ||
100 | |||
101 | QCOMPARE(helper.persistentIndex(subsubNode), QStringLiteral("2.2")); | ||
102 | QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2.2")), subsubNode); | ||
103 | |||
104 | QCOMPARE(helper.persistentIndex(subsubNode2), QStringLiteral("2.3")); | ||
105 | QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2.3")), subsubNode2); | ||
106 | |||
107 | QCOMPARE(helper.persistentIndex(extra), QStringLiteral("e0")); | ||
108 | QCOMPARE(helper.contentFromIndex(node, QStringLiteral("e0")), extra); | ||
109 | |||
110 | QCOMPARE(helper.persistentIndex(extra2), QStringLiteral("e1")); | ||
111 | QCOMPARE(helper.contentFromIndex(node, QStringLiteral("e1")), extra2); | ||
112 | |||
113 | QCOMPARE(helper.persistentIndex(subExtra), QStringLiteral("2:e0")); | ||
114 | QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2:e0")), subExtra); | ||
115 | |||
116 | QCOMPARE(helper.persistentIndex(subsubExtra), QStringLiteral("2.3:e0")); | ||
117 | QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2.3:e0")), subsubExtra); | ||
118 | |||
119 | QCOMPARE(helper.persistentIndex(subsubExtraNode), QStringLiteral("2.3:e0:2")); | ||
120 | QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2.3:e0:2")), subsubExtraNode); | ||
121 | |||
122 | QCOMPARE(helper.persistentIndex(node2ExtraSubsubNode2), QStringLiteral("e0:2.3")); | ||
123 | QCOMPARE(helper.contentFromIndex(node2, QStringLiteral("e0:2.3")), node2ExtraSubsubNode2); | ||
124 | |||
125 | delete node; | ||
126 | } | ||
127 | |||
128 | void NodeHelperTest::testHREF() | ||
129 | { | ||
130 | NodeHelper helper; | ||
131 | KMime::Message::Ptr msg(new KMime::Message); | ||
132 | QUrl url; | ||
133 | |||
134 | KMime::Content *node = msg->topLevel(); | ||
135 | KMime::Content *subNode = new KMime::Content(); | ||
136 | KMime::Content *subsubNode = new KMime::Content(), *subsubNode2 = new KMime::Content(); | ||
137 | KMime::Content *extra = new KMime::Content(), *extra2 = new KMime::Content(); | ||
138 | KMime::Content *subExtra = new KMime::Content(); | ||
139 | KMime::Content *subsubExtra = new KMime::Content(); | ||
140 | KMime::Content *subsubExtraNode = new KMime::Content(); | ||
141 | |||
142 | subNode->addContent(subsubNode); | ||
143 | subNode->addContent(subsubNode2); | ||
144 | node->addContent(subNode); | ||
145 | subsubExtra->addContent(subsubExtraNode); | ||
146 | helper.attachExtraContent(node, extra); | ||
147 | helper.attachExtraContent(node, extra2); | ||
148 | helper.attachExtraContent(subNode, subExtra); | ||
149 | helper.attachExtraContent(subsubNode2, subsubExtra); | ||
150 | |||
151 | url = QUrl(QStringLiteral("")); | ||
152 | QCOMPARE(helper.fromHREF(msg, url), node); | ||
153 | |||
154 | url = QUrl(QStringLiteral("attachment:e0?place=body")); | ||
155 | QCOMPARE(helper.fromHREF(msg, url), extra); | ||
156 | |||
157 | url = QUrl(QStringLiteral("attachment:2.2?place=body")); | ||
158 | QCOMPARE(helper.fromHREF(msg, url), subsubNode); | ||
159 | |||
160 | url = QUrl(QStringLiteral("attachment:2.3:e0:2?place=body")); | ||
161 | QCOMPARE(helper.fromHREF(msg, url), subsubExtraNode); | ||
162 | |||
163 | QCOMPARE(helper.asHREF(node, QStringLiteral("body")), QStringLiteral("attachment:?place=body")); | ||
164 | QCOMPARE(helper.asHREF(extra, QStringLiteral("body")), QStringLiteral("attachment:e0?place=body")); | ||
165 | QCOMPARE(helper.asHREF(subsubNode, QStringLiteral("body")), QStringLiteral("attachment:2.2?place=body")); | ||
166 | QCOMPARE(helper.asHREF(subsubExtraNode, QStringLiteral("body")), QStringLiteral("attachment:2.3:e0:2?place=body")); | ||
167 | } | ||
168 | |||
169 | void NodeHelperTest::testLocalFiles() | ||
170 | { | ||
171 | NodeHelper helper; | ||
172 | KMime::Message::Ptr msg(new KMime::Message); | ||
173 | |||
174 | KMime::Content *node = msg->topLevel(); | ||
175 | KMime::Content *subNode = new KMime::Content(); | ||
176 | KMime::Content *subsubNode = new KMime::Content(), *subsubNode2 = new KMime::Content(); | ||
177 | KMime::Content *extra = new KMime::Content(), *extra2 = new KMime::Content(); | ||
178 | KMime::Content *subExtra = new KMime::Content(); | ||
179 | KMime::Content *subsubExtra = new KMime::Content(); | ||
180 | KMime::Content *subsubExtraNode = new KMime::Content(); | ||
181 | |||
182 | subNode->addContent(subsubNode); | ||
183 | subNode->addContent(subsubNode2); | ||
184 | node->addContent(subNode); | ||
185 | subsubExtra->addContent(subsubExtraNode); | ||
186 | helper.attachExtraContent(node, extra); | ||
187 | helper.attachExtraContent(node, extra2); | ||
188 | helper.attachExtraContent(subNode, subExtra); | ||
189 | helper.attachExtraContent(subsubNode2, subsubExtra); | ||
190 | |||
191 | // helper.writeNodeToTempFile(node); | ||
192 | // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(node)), node); | ||
193 | // helper.writeNodeToTempFile(subNode); | ||
194 | // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subNode)), subNode); | ||
195 | // helper.writeNodeToTempFile(subsubNode); | ||
196 | // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subsubNode)), subsubNode); | ||
197 | // helper.writeNodeToTempFile(subsubNode2); | ||
198 | // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subsubNode2)), subsubNode2); | ||
199 | // helper.writeNodeToTempFile(extra); | ||
200 | // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(extra)), extra); | ||
201 | // helper.writeNodeToTempFile(subExtra); | ||
202 | // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subExtra)), subExtra); | ||
203 | // helper.writeNodeToTempFile(subsubExtra); | ||
204 | // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subsubExtra)), subsubExtra); | ||
205 | // helper.writeNodeToTempFile(subsubExtraNode); | ||
206 | // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subsubExtraNode)), subsubExtraNode); | ||
207 | } | ||
208 | |||
209 | void NodeHelperTest::testFromAsString() | 33 | void NodeHelperTest::testFromAsString() |
210 | { | 34 | { |
211 | const QString tlSender = QStringLiteral("Foo <foo@example.com>"); | 35 | const QString tlSender = QStringLiteral("Foo <foo@example.com>"); |
@@ -241,12 +65,12 @@ void NodeHelperTest::testFromAsString() | |||
241 | node->addContent(encMsg); | 65 | node->addContent(encMsg); |
242 | encNode->addContent(encSubNode); | 66 | encNode->addContent(encSubNode); |
243 | 67 | ||
244 | helper.attachExtraContent(subNode, subExtra); | 68 | // helper.attachExtraContent(subNode, subExtra); |
245 | helper.attachExtraContent(encSubNode, encSubExtra); | 69 | // helper.attachExtraContent(encSubNode, encSubExtra); |
246 | 70 | ||
247 | QCOMPARE(helper.fromAsString(node), tlSender); | 71 | QCOMPARE(helper.fromAsString(node), tlSender); |
248 | QCOMPARE(helper.fromAsString(subNode), tlSender); | 72 | QCOMPARE(helper.fromAsString(subNode), tlSender); |
249 | QCOMPARE(helper.fromAsString(subExtra), tlSender); | 73 | // QCOMPARE(helper.fromAsString(subExtra), tlSender); |
250 | QEXPECT_FAIL("", "Returning sender of encapsulated message is not yet implemented", Continue); | 74 | QEXPECT_FAIL("", "Returning sender of encapsulated message is not yet implemented", Continue); |
251 | QCOMPARE(helper.fromAsString(encNode), encSender); | 75 | QCOMPARE(helper.fromAsString(encNode), encSender); |
252 | QEXPECT_FAIL("", "Returning sender of encapsulated message is not yet implemented", Continue); | 76 | QEXPECT_FAIL("", "Returning sender of encapsulated message is not yet implemented", Continue); |
diff --git a/framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.h b/framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.h index ee01d2cb..071285b1 100644 --- a/framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.h +++ b/framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.h | |||
@@ -34,9 +34,6 @@ public: | |||
34 | NodeHelperTest(); | 34 | NodeHelperTest(); |
35 | 35 | ||
36 | private Q_SLOTS: | 36 | private Q_SLOTS: |
37 | void testPersistentIndex(); | ||
38 | void testLocalFiles(); | ||
39 | void testHREF(); | ||
40 | void testFromAsString(); | 37 | void testFromAsString(); |
41 | }; | 38 | }; |
42 | 39 | ||
diff --git a/framework/src/domain/mime/mimetreeparser/messagepart.cpp b/framework/src/domain/mime/mimetreeparser/messagepart.cpp index b6dfd30a..d955e663 100644 --- a/framework/src/domain/mime/mimetreeparser/messagepart.cpp +++ b/framework/src/domain/mime/mimetreeparser/messagepart.cpp | |||
@@ -949,7 +949,6 @@ void SignedMessagePart::setVerificationResult(const CryptoBodyPartMemento *m, KM | |||
949 | if (!tempNode->head().isEmpty()) { | 949 | if (!tempNode->head().isEmpty()) { |
950 | tempNode->contentDescription()->from7BitString("signed data"); | 950 | tempNode->contentDescription()->from7BitString("signed data"); |
951 | } | 951 | } |
952 | mOtp->mNodeHelper->attachExtraContent(mNode, tempNode); | ||
953 | 952 | ||
954 | parseInternal(tempNode, false); | 953 | parseInternal(tempNode, false); |
955 | } | 954 | } |
@@ -1193,7 +1192,6 @@ void EncryptedMessagePart::startDecryption(KMime::Content *data) | |||
1193 | if (!tempNode->head().isEmpty()) { | 1192 | if (!tempNode->head().isEmpty()) { |
1194 | tempNode->contentDescription()->from7BitString("encrypted data"); | 1193 | tempNode->contentDescription()->from7BitString("encrypted data"); |
1195 | } | 1194 | } |
1196 | mOtp->mNodeHelper->attachExtraContent(mNode, tempNode); | ||
1197 | 1195 | ||
1198 | parseInternal(tempNode, false); | 1196 | parseInternal(tempNode, false); |
1199 | } | 1197 | } |
diff --git a/framework/src/domain/mime/mimetreeparser/nodehelper.cpp b/framework/src/domain/mime/mimetreeparser/nodehelper.cpp index 4e60fa68..bbd705f9 100644 --- a/framework/src/domain/mime/mimetreeparser/nodehelper.cpp +++ b/framework/src/domain/mime/mimetreeparser/nodehelper.cpp | |||
@@ -46,8 +46,7 @@ | |||
46 | namespace MimeTreeParser | 46 | namespace MimeTreeParser |
47 | { | 47 | { |
48 | 48 | ||
49 | NodeHelper::NodeHelper() : | 49 | NodeHelper::NodeHelper() |
50 | mAttachmentFilesDir(new AttachmentTemporaryFilesDirs()) | ||
51 | { | 50 | { |
52 | //TODO(Andras) add methods to modify these prefixes | 51 | //TODO(Andras) add methods to modify these prefixes |
53 | 52 | ||
@@ -78,11 +77,6 @@ NodeHelper::NodeHelper() : | |||
78 | 77 | ||
79 | NodeHelper::~NodeHelper() | 78 | NodeHelper::~NodeHelper() |
80 | { | 79 | { |
81 | if (mAttachmentFilesDir) { | ||
82 | mAttachmentFilesDir->forceCleanTempFiles(); | ||
83 | delete mAttachmentFilesDir; | ||
84 | mAttachmentFilesDir = nullptr; | ||
85 | } | ||
86 | clear(); | 80 | clear(); |
87 | } | 81 | } |
88 | 82 | ||
@@ -109,20 +103,6 @@ void NodeHelper::setNodeUnprocessed(KMime::Content *node, bool recurse) | |||
109 | } | 103 | } |
110 | mProcessedNodes.removeAll(node); | 104 | mProcessedNodes.removeAll(node); |
111 | 105 | ||
112 | //avoid double addition of extra nodes, eg. encrypted attachments | ||
113 | const QMap<KMime::Content *, QList<KMime::Content *> >::iterator it = mExtraContents.find(node); | ||
114 | if (it != mExtraContents.end()) { | ||
115 | Q_FOREACH (KMime::Content *c, it.value()) { | ||
116 | KMime::Content *p = c->parent(); | ||
117 | if (p) { | ||
118 | p->removeContent(c); | ||
119 | } | ||
120 | } | ||
121 | qDeleteAll(it.value()); | ||
122 | qCDebug(MIMETREEPARSER_LOG) << "mExtraContents deleted for" << it.key(); | ||
123 | mExtraContents.erase(it); | ||
124 | } | ||
125 | |||
126 | qCDebug(MIMETREEPARSER_LOG) << "Node UNprocessed: " << node; | 106 | qCDebug(MIMETREEPARSER_LOG) << "Node UNprocessed: " << node; |
127 | if (recurse) { | 107 | if (recurse) { |
128 | const auto contents = node->contents(); | 108 | const auto contents = node->contents(); |
@@ -144,19 +124,6 @@ void NodeHelper::clear() | |||
144 | { | 124 | { |
145 | mProcessedNodes.clear(); | 125 | mProcessedNodes.clear(); |
146 | mOverrideCodecs.clear(); | 126 | mOverrideCodecs.clear(); |
147 | QMap<KMime::Content *, QList<KMime::Content *> >::ConstIterator end(mExtraContents.constEnd()); | ||
148 | |||
149 | for (QMap<KMime::Content *, QList<KMime::Content *> >::ConstIterator it = mExtraContents.constBegin(); it != end; ++it) { | ||
150 | Q_FOREACH (KMime::Content *c, it.value()) { | ||
151 | KMime::Content *p = c->parent(); | ||
152 | if (p) { | ||
153 | p->removeContent(c); | ||
154 | } | ||
155 | } | ||
156 | qDeleteAll(it.value()); | ||
157 | qCDebug(MIMETREEPARSER_LOG) << "mExtraContents deleted for" << it.key(); | ||
158 | } | ||
159 | mExtraContents.clear(); | ||
160 | } | 127 | } |
161 | 128 | ||
162 | 129 | ||
@@ -170,25 +137,6 @@ void NodeHelper::setPartMetaData(KMime::Content *node, const PartMetaData &metaD | |||
170 | mPartMetaDatas.insert(node, metaData); | 137 | mPartMetaDatas.insert(node, metaData); |
171 | } | 138 | } |
172 | 139 | ||
173 | void NodeHelper::forceCleanTempFiles() | ||
174 | { | ||
175 | mAttachmentFilesDir->forceCleanTempFiles(); | ||
176 | delete mAttachmentFilesDir; | ||
177 | mAttachmentFilesDir = nullptr; | ||
178 | } | ||
179 | |||
180 | void NodeHelper::removeTempFiles() | ||
181 | { | ||
182 | //Don't delete it it will delete in class | ||
183 | mAttachmentFilesDir->removeTempFiles(); | ||
184 | mAttachmentFilesDir = new AttachmentTemporaryFilesDirs(); | ||
185 | } | ||
186 | |||
187 | void NodeHelper::addTempFile(const QString &file) | ||
188 | { | ||
189 | mAttachmentFilesDir->addTempFile(file); | ||
190 | } | ||
191 | |||
192 | bool NodeHelper::isInEncapsulatedMessage(KMime::Content *node) | 140 | bool NodeHelper::isInEncapsulatedMessage(KMime::Content *node) |
193 | { | 141 | { |
194 | const KMime::Content *const topLevel = node->topLevel(); | 142 | const KMime::Content *const topLevel = node->topLevel(); |
@@ -278,114 +226,6 @@ QString NodeHelper::fileName(const KMime::Content *node) | |||
278 | return name; | 226 | return name; |
279 | } | 227 | } |
280 | 228 | ||
281 | /*! | ||
282 | Creates a persistent index string that bridges the gap between the | ||
283 | permanent nodes and the temporary ones. | ||
284 | |||
285 | Used internally for robust indexing. | ||
286 | */ | ||
287 | QString NodeHelper::persistentIndex(const KMime::Content *node) const | ||
288 | { | ||
289 | if (!node) { | ||
290 | return QString(); | ||
291 | } | ||
292 | |||
293 | QString indexStr = node->index().toString(); | ||
294 | if (indexStr.isEmpty()) { | ||
295 | QMapIterator<KMime::Message::Content *, QList<KMime::Content *> > it(mExtraContents); | ||
296 | while (it.hasNext()) { | ||
297 | it.next(); | ||
298 | const auto &extraNodes = it.value(); | ||
299 | for (int i = 0; i < extraNodes.size(); i++) { | ||
300 | if (extraNodes[i] == node) { | ||
301 | indexStr = QString::fromLatin1("e%1").arg(i); | ||
302 | const QString parentIndex = persistentIndex(it.key()); | ||
303 | if (!parentIndex.isEmpty()) { | ||
304 | indexStr = QString::fromLatin1("%1:%2").arg(parentIndex, indexStr); | ||
305 | } | ||
306 | qWarning() << "Persistentindex: " << indexStr; | ||
307 | return indexStr; | ||
308 | } | ||
309 | } | ||
310 | } | ||
311 | } else { | ||
312 | const KMime::Content *const topLevel = node->topLevel(); | ||
313 | //if the node is an extra node, prepend the index of the extra node to the url | ||
314 | QMapIterator<KMime::Message::Content *, QList<KMime::Content *> > it(mExtraContents); | ||
315 | while (it.hasNext()) { | ||
316 | it.next(); | ||
317 | const QList<KMime::Content *> &extraNodes = extraContents(it.key()); | ||
318 | for (int i = 0; i < extraNodes.size(); ++i) { | ||
319 | KMime::Content *const extraNode = extraNodes[i]; | ||
320 | if (topLevel == extraNode) { | ||
321 | indexStr.prepend(QStringLiteral("e%1:").arg(i)); | ||
322 | const QString parentIndex = persistentIndex(it.key()); | ||
323 | if (!parentIndex.isEmpty()) { | ||
324 | indexStr = QStringLiteral("%1:%2").arg(parentIndex, indexStr); | ||
325 | } | ||
326 | qWarning() << "Persistentindex: " << indexStr; | ||
327 | return indexStr; | ||
328 | } | ||
329 | } | ||
330 | } | ||
331 | } | ||
332 | |||
333 | qWarning() << "Persistentindex: " << indexStr; | ||
334 | return indexStr; | ||
335 | } | ||
336 | |||
337 | KMime::Content *NodeHelper::contentFromIndex(KMime::Content *node, const QString &persistentIndex) const | ||
338 | { | ||
339 | KMime::Content *c = node->topLevel(); | ||
340 | if (c) { | ||
341 | const QStringList pathParts = persistentIndex.split(QLatin1Char(':'), QString::SkipEmptyParts); | ||
342 | const int pathPartsSize(pathParts.size()); | ||
343 | for (int i = 0; i < pathPartsSize; ++i) { | ||
344 | const QString &path = pathParts[i]; | ||
345 | if (path.startsWith(QLatin1Char('e'))) { | ||
346 | const QList<KMime::Content *> &extraParts = mExtraContents.value(c); | ||
347 | const int idx = path.midRef(1, -1).toInt(); | ||
348 | c = (idx < extraParts.size()) ? extraParts[idx] : nullptr; | ||
349 | } else { | ||
350 | c = c->content(KMime::ContentIndex(path)); | ||
351 | } | ||
352 | if (!c) { | ||
353 | break; | ||
354 | } | ||
355 | } | ||
356 | } | ||
357 | return c; | ||
358 | } | ||
359 | |||
360 | QString NodeHelper::asHREF(const KMime::Content *node, const QString &place) const | ||
361 | { | ||
362 | return QStringLiteral("attachment:%1?place=%2").arg(persistentIndex(node), place); | ||
363 | } | ||
364 | |||
365 | KMime::Content *NodeHelper::fromHREF(const KMime::Message::Ptr &mMessage, const QUrl &url) const | ||
366 | { | ||
367 | if (url.isEmpty()) { | ||
368 | return mMessage.data(); | ||
369 | } | ||
370 | |||
371 | if (!url.isLocalFile()) { | ||
372 | return contentFromIndex(mMessage.data(), url.adjusted(QUrl::StripTrailingSlash).path()); | ||
373 | } else { | ||
374 | const QString path = url.toLocalFile(); | ||
375 | // extract from /<path>/qttestn28554.index.2.3:0:2/unnamed -> "2.3:0:2" | ||
376 | // start of the index is something that is not a number followed by a dot: \D. | ||
377 | // index is only made of numbers,"." and ":": ([0-9.:]+) | ||
378 | // index is the last part of the folder name: / | ||
379 | const QRegExp rIndex(QStringLiteral("\\D\\.([e0-9.:]+)/")); | ||
380 | |||
381 | //search the occurence at most at the end | ||
382 | if (rIndex.lastIndexIn(path) != -1) { | ||
383 | return contentFromIndex(mMessage.data(), rIndex.cap(1)); | ||
384 | } | ||
385 | return mMessage.data(); | ||
386 | } | ||
387 | } | ||
388 | |||
389 | QString NodeHelper::fixEncoding(const QString &encoding) | 229 | QString NodeHelper::fixEncoding(const QString &encoding) |
390 | { | 230 | { |
391 | QString returnEncoding = encoding; | 231 | QString returnEncoding = encoding; |
@@ -432,28 +272,17 @@ QString NodeHelper::fromAsString(KMime::Content *node) const | |||
432 | { | 272 | { |
433 | if (auto topLevel = dynamic_cast<KMime::Message *>(node->topLevel())) { | 273 | if (auto topLevel = dynamic_cast<KMime::Message *>(node->topLevel())) { |
434 | return topLevel->from()->asUnicodeString(); | 274 | return topLevel->from()->asUnicodeString(); |
435 | } else { | 275 | // } else { |
436 | auto realNode = std::find_if(mExtraContents.cbegin(), mExtraContents.cend(), | 276 | // auto realNode = std::find_if(mExtraContents.cbegin(), mExtraContents.cend(), |
437 | [node](const QList<KMime::Content *> &nodes) { | 277 | // [node](const QList<KMime::Content *> &nodes) { |
438 | return nodes.contains(node); | 278 | // return nodes.contains(node); |
439 | }); | 279 | // }); |
440 | if (realNode != mExtraContents.cend()) { | 280 | // if (realNode != mExtraContents.cend()) { |
441 | return fromAsString(realNode.key()); | 281 | // return fromAsString(realNode.key()); |
442 | } | 282 | // } |
443 | } | 283 | } |
444 | 284 | ||
445 | return QString(); | 285 | return QString(); |
446 | } | 286 | } |
447 | 287 | ||
448 | void NodeHelper::attachExtraContent(KMime::Content *topLevelNode, KMime::Content *content) | ||
449 | { | ||
450 | qCDebug(MIMETREEPARSER_LOG) << "mExtraContents added for" << topLevelNode << " extra content: " << content; | ||
451 | mExtraContents[topLevelNode].append(content); | ||
452 | } | ||
453 | |||
454 | QList< KMime::Content * > NodeHelper::extraContents(KMime::Content *topLevelnode) const | ||
455 | { | ||
456 | return mExtraContents.value(topLevelnode); | ||
457 | } | ||
458 | |||
459 | } | 288 | } |
diff --git a/framework/src/domain/mime/mimetreeparser/nodehelper.h b/framework/src/domain/mime/mimetreeparser/nodehelper.h index bf472413..75b82aaf 100644 --- a/framework/src/domain/mime/mimetreeparser/nodehelper.h +++ b/framework/src/domain/mime/mimetreeparser/nodehelper.h | |||
@@ -70,12 +70,6 @@ public: | |||
70 | */ | 70 | */ |
71 | void magicSetType(KMime::Content *node, bool autoDecode = true); | 71 | void magicSetType(KMime::Content *node, bool autoDecode = true); |
72 | 72 | ||
73 | /** Attach an extra node to an existing node */ | ||
74 | void attachExtraContent(KMime::Content *topLevelNode, KMime::Content *content); | ||
75 | |||
76 | /** Get the extra nodes attached to the @param topLevelNode and all sub-nodes of @param topLevelNode */ | ||
77 | QList<KMime::Content *> extraContents(KMime::Content *topLevelNode) const; | ||
78 | |||
79 | /** Get a QTextCodec suitable for this message part */ | 73 | /** Get a QTextCodec suitable for this message part */ |
80 | const QTextCodec *codec(KMime::Content *node); | 74 | const QTextCodec *codec(KMime::Content *node); |
81 | 75 | ||
@@ -83,21 +77,6 @@ public: | |||
83 | void setOverrideCodec(KMime::Content *node, const QTextCodec *codec); | 77 | void setOverrideCodec(KMime::Content *node, const QTextCodec *codec); |
84 | 78 | ||
85 | /** | 79 | /** |
86 | * Cleanup the attachment temp files | ||
87 | */ | ||
88 | void removeTempFiles(); | ||
89 | |||
90 | /** | ||
91 | * Add a file to the list of managed temporary files | ||
92 | */ | ||
93 | void addTempFile(const QString &file); | ||
94 | |||
95 | // Get a href in the form attachment:<nodeId>?place=<place>, used by ObjectTreeParser and | ||
96 | // UrlHandlerManager. | ||
97 | QString asHREF(const KMime::Content *node, const QString &place) const; | ||
98 | KMime::Content *fromHREF(const KMime::Message::Ptr &mMessage, const QUrl &href) const; | ||
99 | |||
100 | /** | ||
101 | * @return true if this node is a child or an encapsulated message | 80 | * @return true if this node is a child or an encapsulated message |
102 | */ | 81 | */ |
103 | static bool isInEncapsulatedMessage(KMime::Content *node); | 82 | static bool isInEncapsulatedMessage(KMime::Content *node); |
@@ -152,19 +131,6 @@ private: | |||
152 | bool unencryptedMessage_helper(KMime::Content *node, QByteArray &resultingData, bool addHeaders, | 131 | bool unencryptedMessage_helper(KMime::Content *node, QByteArray &resultingData, bool addHeaders, |
153 | int recursionLevel = 1); | 132 | int recursionLevel = 1); |
154 | 133 | ||
155 | /** Creates a persistent index string that bridges the gap between the | ||
156 | permanent nodes and the temporary ones. | ||
157 | |||
158 | Used internally for robust indexing. | ||
159 | **/ | ||
160 | QString persistentIndex(const KMime::Content *node) const; | ||
161 | |||
162 | /** Translates the persistentIndex into a node back | ||
163 | |||
164 | node: any node of the actually message to what the persistentIndex is interpreded | ||
165 | **/ | ||
166 | KMime::Content *contentFromIndex(KMime::Content *node, const QString &persistentIndex) const; | ||
167 | |||
168 | private: | 134 | private: |
169 | QList<KMime::Content *> mProcessedNodes; | 135 | QList<KMime::Content *> mProcessedNodes; |
170 | QList<KMime::Content *> mNodesUnderProcess; | 136 | QList<KMime::Content *> mNodesUnderProcess; |
@@ -173,8 +139,6 @@ private: | |||
173 | QTextCodec *mLocalCodec; | 139 | QTextCodec *mLocalCodec; |
174 | QMap<KMime::Content *, const QTextCodec *> mOverrideCodecs; | 140 | QMap<KMime::Content *, const QTextCodec *> mOverrideCodecs; |
175 | QMap<KMime::Content *, PartMetaData> mPartMetaDatas; | 141 | QMap<KMime::Content *, PartMetaData> mPartMetaDatas; |
176 | QMap<KMime::Message::Content *, QList<KMime::Content *> > mExtraContents; | ||
177 | AttachmentTemporaryFilesDirs *mAttachmentFilesDir; | ||
178 | 142 | ||
179 | friend class NodeHelperTest; | 143 | friend class NodeHelperTest; |
180 | }; | 144 | }; |
diff --git a/framework/src/domain/mime/mimetreeparser/utils.cpp b/framework/src/domain/mime/mimetreeparser/utils.cpp index 574e3489..6fae9022 100644 --- a/framework/src/domain/mime/mimetreeparser/utils.cpp +++ b/framework/src/domain/mime/mimetreeparser/utils.cpp | |||
@@ -31,7 +31,6 @@ MimeMessagePart::Ptr MimeTreeParser::createAndParseTempNode(Interface::BodyPart | |||
31 | if (!newNode->head().isEmpty()) { | 31 | if (!newNode->head().isEmpty()) { |
32 | newNode->contentDescription()->from7BitString(cntDesc); | 32 | newNode->contentDescription()->from7BitString(cntDesc); |
33 | } | 33 | } |
34 | part.nodeHelper()->attachExtraContent(parentNode, newNode); | ||
35 | 34 | ||
36 | return MimeMessagePart::Ptr(new MimeMessagePart(part.objectTreeParser(), newNode, false)); | 35 | return MimeMessagePart::Ptr(new MimeMessagePart(part.objectTreeParser(), newNode, false)); |
37 | } | 36 | } |