diff options
Diffstat (limited to 'framework/src/domain/mime/mimetreeparser/nodehelper.cpp')
-rw-r--r-- | framework/src/domain/mime/mimetreeparser/nodehelper.cpp | 85 |
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 | ||
459 | void 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 | |||
483 | void 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 | |||
503 | KMime::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 | |||
529 | QVector<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 | } |