summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-06-04 15:35:24 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-06-04 15:37:00 +0200
commitc6407d7a43541e8e7fb38643601cb06a83b8e305 (patch)
treec8bcffc01fd710f2bfdabfcb1e7abb1d3560c6c1
parent964f0003584a0b745045db75ca6184f54eddd859 (diff)
downloadkube-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.
-rw-r--r--framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.cpp182
-rw-r--r--framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.h3
-rw-r--r--framework/src/domain/mime/mimetreeparser/messagepart.cpp2
-rw-r--r--framework/src/domain/mime/mimetreeparser/nodehelper.cpp189
-rw-r--r--framework/src/domain/mime/mimetreeparser/nodehelper.h36
-rw-r--r--framework/src/domain/mime/mimetreeparser/utils.cpp1
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
33void 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
128void 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
169void 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
209void NodeHelperTest::testFromAsString() 33void 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
36private Q_SLOTS: 36private 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 @@
46namespace MimeTreeParser 46namespace MimeTreeParser
47{ 47{
48 48
49NodeHelper::NodeHelper() : 49NodeHelper::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
79NodeHelper::~NodeHelper() 78NodeHelper::~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
173void NodeHelper::forceCleanTempFiles()
174{
175 mAttachmentFilesDir->forceCleanTempFiles();
176 delete mAttachmentFilesDir;
177 mAttachmentFilesDir = nullptr;
178}
179
180void NodeHelper::removeTempFiles()
181{
182 //Don't delete it it will delete in class
183 mAttachmentFilesDir->removeTempFiles();
184 mAttachmentFilesDir = new AttachmentTemporaryFilesDirs();
185}
186
187void NodeHelper::addTempFile(const QString &file)
188{
189 mAttachmentFilesDir->addTempFile(file);
190}
191
192bool NodeHelper::isInEncapsulatedMessage(KMime::Content *node) 140bool 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*/
287QString 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
337KMime::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
360QString NodeHelper::asHREF(const KMime::Content *node, const QString &place) const
361{
362 return QStringLiteral("attachment:%1?place=%2").arg(persistentIndex(node), place);
363}
364
365KMime::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
389QString NodeHelper::fixEncoding(const QString &encoding) 229QString 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
448void 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
454QList< 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
168private: 134private:
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}