summaryrefslogtreecommitdiffstats
path: root/framework/src
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src')
-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}