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 /framework/src/domain/mime/mimetreeparser/nodehelper.cpp | |
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.
Diffstat (limited to 'framework/src/domain/mime/mimetreeparser/nodehelper.cpp')
-rw-r--r-- | framework/src/domain/mime/mimetreeparser/nodehelper.cpp | 189 |
1 files changed, 9 insertions, 180 deletions
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 | } |