summaryrefslogtreecommitdiffstats
path: root/framework/src/domain/mime/mimetreeparser/nodehelper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/domain/mime/mimetreeparser/nodehelper.cpp')
-rw-r--r--framework/src/domain/mime/mimetreeparser/nodehelper.cpp85
1 files changed, 0 insertions, 85 deletions
diff --git a/framework/src/domain/mime/mimetreeparser/nodehelper.cpp b/framework/src/domain/mime/mimetreeparser/nodehelper.cpp
index 3005ea0f..4e60fa68 100644
--- a/framework/src/domain/mime/mimetreeparser/nodehelper.cpp
+++ b/framework/src/domain/mime/mimetreeparser/nodehelper.cpp
@@ -456,89 +456,4 @@ QList< KMime::Content * > NodeHelper::extraContents(KMime::Content *topLevelnode
456 return mExtraContents.value(topLevelnode); 456 return mExtraContents.value(topLevelnode);
457} 457}
458 458
459void NodeHelper::mergeExtraNodes(KMime::Content *node)
460{
461 if (!node) {
462 return;
463 }
464
465 const QList<KMime::Content * > extraNodes = extraContents(node);
466 for (KMime::Content *extra : extraNodes) {
467 if (node->bodyIsMessage()) {
468 qCWarning(MIMETREEPARSER_LOG) << "Asked to attach extra content to a kmime::message, this does not make sense. Attaching to:" << node <<
469 node->encodedContent() << "\n====== with =======\n" << extra << extra->encodedContent();
470 continue;
471 }
472 KMime::Content *c = new KMime::Content(node);
473 c->setContent(extra->encodedContent());
474 c->parse();
475 node->addContent(c);
476 }
477
478 Q_FOREACH (KMime::Content *child, node->contents()) {
479 mergeExtraNodes(child);
480 }
481}
482
483void NodeHelper::cleanFromExtraNodes(KMime::Content *node)
484{
485 if (!node) {
486 return;
487 }
488 const QList<KMime::Content * > extraNodes = extraContents(node);
489 for (KMime::Content *extra : extraNodes) {
490 QByteArray s = extra->encodedContent();
491 const auto children = node->contents();
492 for (KMime::Content *c : children) {
493 if (c->encodedContent() == s) {
494 node->removeContent(c);
495 }
496 }
497 }
498 Q_FOREACH (KMime::Content *child, node->contents()) {
499 cleanFromExtraNodes(child);
500 }
501}
502
503KMime::Message *NodeHelper::messageWithExtraContent(KMime::Content *topLevelNode)
504{
505 /*The merge is done in several steps:
506 1) merge the extra nodes into topLevelNode
507 2) copy the modified (merged) node tree into a new node tree
508 3) restore the original node tree in topLevelNode by removing the extra nodes from it
509
510 The reason is that extra nodes are assigned by pointer value to the nodes in the original tree.
511 */
512 if (!topLevelNode) {
513 return nullptr;
514 }
515
516 mergeExtraNodes(topLevelNode);
517
518 KMime::Message *m = new KMime::Message;
519 m->setContent(topLevelNode->encodedContent());
520 m->parse();
521
522 cleanFromExtraNodes(topLevelNode);
523// qCDebug(MIMETREEPARSER_LOG) << "MESSAGE WITH EXTRA: " << m->encodedContent();
524// qCDebug(MIMETREEPARSER_LOG) << "MESSAGE WITHOUT EXTRA: " << topLevelNode->encodedContent();
525
526 return m;
527}
528
529QVector<KMime::Content *> NodeHelper::attachmentsOfExtraContents() const
530{
531 QVector<KMime::Content *> result;
532 for (auto it = mExtraContents.begin(); it != mExtraContents.end(); ++it) {
533 foreach (auto content, it.value()) {
534 if (KMime::isAttachment(content)) {
535 result.push_back(content);
536 } else {
537 result += content->attachments();
538 }
539 }
540 }
541 return result;
542}
543
544} 459}