From c6407d7a43541e8e7fb38643601cb06a83b8e305 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 4 Jun 2017 15:35:24 +0200 Subject: 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. --- .../mimetreeparser/autotests/nodehelpertest.cpp | 182 +------------------- .../mime/mimetreeparser/autotests/nodehelpertest.h | 3 - .../src/domain/mime/mimetreeparser/messagepart.cpp | 2 - .../src/domain/mime/mimetreeparser/nodehelper.cpp | 189 +-------------------- .../src/domain/mime/mimetreeparser/nodehelper.h | 36 ---- framework/src/domain/mime/mimetreeparser/utils.cpp | 1 - 6 files changed, 12 insertions(+), 401 deletions(-) (limited to 'framework') 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() } -void NodeHelperTest::testPersistentIndex() -{ - NodeHelper helper; - - KMime::Content *node = new KMime::Content(); - KMime::Content *node2 = new KMime::Content(); - KMime::Content *node2Extra = new KMime::Content(); - KMime::Content *subNode = new KMime::Content(); - KMime::Content *subsubNode = new KMime::Content(), *subsubNode2 = new KMime::Content(); - KMime::Content *node2ExtraSubNode = new KMime::Content(); - KMime::Content *node2ExtraSubsubNode = new KMime::Content(); - KMime::Content *node2ExtraSubsubNode2 = new KMime::Content(); - KMime::Content *extra = new KMime::Content(), *extra2 = new KMime::Content(); - KMime::Content *subExtra = new KMime::Content(); - KMime::Content *subsubExtra = new KMime::Content(); - KMime::Content *subsubExtraNode = new KMime::Content(); - - subNode->addContent(subsubNode); - subNode->addContent(subsubNode2); - node->addContent(subNode); - subsubExtra->addContent(subsubExtraNode); - helper.attachExtraContent(node, extra); - helper.attachExtraContent(node, extra2); - helper.attachExtraContent(subNode, subExtra); - helper.attachExtraContent(subsubNode2, subsubExtra); - - // This simulates Opaque S/MIME signed and encrypted message with attachment - // (attachment is node2SubsubNode2) - node2Extra->addContent(node2ExtraSubNode); - node2ExtraSubNode->addContent(node2ExtraSubsubNode); - node2ExtraSubNode->addContent(node2ExtraSubsubNode2); - helper.attachExtraContent(node2, node2Extra); - - /* all content has a internal first child, so indexes starts at 2 - * node "" - * -> subNode "2" - * -> subsubNode "2.2" - * -> subsubNode2 "2.3" - * - * node "" - * -> extra "e0" - * -> extra2 "e1" - * - * subNode "2" - * -> subExtra "2:e0" - * - * subsubNode2 "2.3" - * -> subsubExtra "2.3:e0" - * -> subsubExtraNode "2.3:e0:2" - * - * node2 "" - * - * node2 "" - * -> node2Extra "e0" - * -> node2ExtraSubNode "e0:2" - * -> node2ExtraSubsubNode "e0:2.2" - * -> node2ExtraSubsubNode2 "e0:2.3" - */ - - QCOMPARE(helper.persistentIndex(node), QStringLiteral("")); - QCOMPARE(helper.contentFromIndex(node, QStringLiteral("")), node); - - QCOMPARE(helper.persistentIndex(node->contents()[0]), QStringLiteral("1")); - QCOMPARE(helper.contentFromIndex(node, QStringLiteral("1")), node->contents()[0]); - - QCOMPARE(helper.persistentIndex(subNode), QStringLiteral("2")); - QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2")), subNode); - - QCOMPARE(helper.persistentIndex(subsubNode), QStringLiteral("2.2")); - QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2.2")), subsubNode); - - QCOMPARE(helper.persistentIndex(subsubNode2), QStringLiteral("2.3")); - QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2.3")), subsubNode2); - - QCOMPARE(helper.persistentIndex(extra), QStringLiteral("e0")); - QCOMPARE(helper.contentFromIndex(node, QStringLiteral("e0")), extra); - - QCOMPARE(helper.persistentIndex(extra2), QStringLiteral("e1")); - QCOMPARE(helper.contentFromIndex(node, QStringLiteral("e1")), extra2); - - QCOMPARE(helper.persistentIndex(subExtra), QStringLiteral("2:e0")); - QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2:e0")), subExtra); - - QCOMPARE(helper.persistentIndex(subsubExtra), QStringLiteral("2.3:e0")); - QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2.3:e0")), subsubExtra); - - QCOMPARE(helper.persistentIndex(subsubExtraNode), QStringLiteral("2.3:e0:2")); - QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2.3:e0:2")), subsubExtraNode); - - QCOMPARE(helper.persistentIndex(node2ExtraSubsubNode2), QStringLiteral("e0:2.3")); - QCOMPARE(helper.contentFromIndex(node2, QStringLiteral("e0:2.3")), node2ExtraSubsubNode2); - - delete node; -} - -void NodeHelperTest::testHREF() -{ - NodeHelper helper; - KMime::Message::Ptr msg(new KMime::Message); - QUrl url; - - KMime::Content *node = msg->topLevel(); - KMime::Content *subNode = new KMime::Content(); - KMime::Content *subsubNode = new KMime::Content(), *subsubNode2 = new KMime::Content(); - KMime::Content *extra = new KMime::Content(), *extra2 = new KMime::Content(); - KMime::Content *subExtra = new KMime::Content(); - KMime::Content *subsubExtra = new KMime::Content(); - KMime::Content *subsubExtraNode = new KMime::Content(); - - subNode->addContent(subsubNode); - subNode->addContent(subsubNode2); - node->addContent(subNode); - subsubExtra->addContent(subsubExtraNode); - helper.attachExtraContent(node, extra); - helper.attachExtraContent(node, extra2); - helper.attachExtraContent(subNode, subExtra); - helper.attachExtraContent(subsubNode2, subsubExtra); - - url = QUrl(QStringLiteral("")); - QCOMPARE(helper.fromHREF(msg, url), node); - - url = QUrl(QStringLiteral("attachment:e0?place=body")); - QCOMPARE(helper.fromHREF(msg, url), extra); - - url = QUrl(QStringLiteral("attachment:2.2?place=body")); - QCOMPARE(helper.fromHREF(msg, url), subsubNode); - - url = QUrl(QStringLiteral("attachment:2.3:e0:2?place=body")); - QCOMPARE(helper.fromHREF(msg, url), subsubExtraNode); - - QCOMPARE(helper.asHREF(node, QStringLiteral("body")), QStringLiteral("attachment:?place=body")); - QCOMPARE(helper.asHREF(extra, QStringLiteral("body")), QStringLiteral("attachment:e0?place=body")); - QCOMPARE(helper.asHREF(subsubNode, QStringLiteral("body")), QStringLiteral("attachment:2.2?place=body")); - QCOMPARE(helper.asHREF(subsubExtraNode, QStringLiteral("body")), QStringLiteral("attachment:2.3:e0:2?place=body")); -} - -void NodeHelperTest::testLocalFiles() -{ - NodeHelper helper; - KMime::Message::Ptr msg(new KMime::Message); - - KMime::Content *node = msg->topLevel(); - KMime::Content *subNode = new KMime::Content(); - KMime::Content *subsubNode = new KMime::Content(), *subsubNode2 = new KMime::Content(); - KMime::Content *extra = new KMime::Content(), *extra2 = new KMime::Content(); - KMime::Content *subExtra = new KMime::Content(); - KMime::Content *subsubExtra = new KMime::Content(); - KMime::Content *subsubExtraNode = new KMime::Content(); - - subNode->addContent(subsubNode); - subNode->addContent(subsubNode2); - node->addContent(subNode); - subsubExtra->addContent(subsubExtraNode); - helper.attachExtraContent(node, extra); - helper.attachExtraContent(node, extra2); - helper.attachExtraContent(subNode, subExtra); - helper.attachExtraContent(subsubNode2, subsubExtra); - - // helper.writeNodeToTempFile(node); - // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(node)), node); - // helper.writeNodeToTempFile(subNode); - // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subNode)), subNode); - // helper.writeNodeToTempFile(subsubNode); - // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subsubNode)), subsubNode); - // helper.writeNodeToTempFile(subsubNode2); - // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subsubNode2)), subsubNode2); - // helper.writeNodeToTempFile(extra); - // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(extra)), extra); - // helper.writeNodeToTempFile(subExtra); - // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subExtra)), subExtra); - // helper.writeNodeToTempFile(subsubExtra); - // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subsubExtra)), subsubExtra); - // helper.writeNodeToTempFile(subsubExtraNode); - // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subsubExtraNode)), subsubExtraNode); -} - void NodeHelperTest::testFromAsString() { const QString tlSender = QStringLiteral("Foo "); @@ -241,12 +65,12 @@ void NodeHelperTest::testFromAsString() node->addContent(encMsg); encNode->addContent(encSubNode); - helper.attachExtraContent(subNode, subExtra); - helper.attachExtraContent(encSubNode, encSubExtra); + // helper.attachExtraContent(subNode, subExtra); + // helper.attachExtraContent(encSubNode, encSubExtra); QCOMPARE(helper.fromAsString(node), tlSender); QCOMPARE(helper.fromAsString(subNode), tlSender); - QCOMPARE(helper.fromAsString(subExtra), tlSender); + // QCOMPARE(helper.fromAsString(subExtra), tlSender); QEXPECT_FAIL("", "Returning sender of encapsulated message is not yet implemented", Continue); QCOMPARE(helper.fromAsString(encNode), encSender); 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: NodeHelperTest(); private Q_SLOTS: - void testPersistentIndex(); - void testLocalFiles(); - void testHREF(); void testFromAsString(); }; 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 if (!tempNode->head().isEmpty()) { tempNode->contentDescription()->from7BitString("signed data"); } - mOtp->mNodeHelper->attachExtraContent(mNode, tempNode); parseInternal(tempNode, false); } @@ -1193,7 +1192,6 @@ void EncryptedMessagePart::startDecryption(KMime::Content *data) if (!tempNode->head().isEmpty()) { tempNode->contentDescription()->from7BitString("encrypted data"); } - mOtp->mNodeHelper->attachExtraContent(mNode, tempNode); parseInternal(tempNode, false); } 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 @@ namespace MimeTreeParser { -NodeHelper::NodeHelper() : - mAttachmentFilesDir(new AttachmentTemporaryFilesDirs()) +NodeHelper::NodeHelper() { //TODO(Andras) add methods to modify these prefixes @@ -78,11 +77,6 @@ NodeHelper::NodeHelper() : NodeHelper::~NodeHelper() { - if (mAttachmentFilesDir) { - mAttachmentFilesDir->forceCleanTempFiles(); - delete mAttachmentFilesDir; - mAttachmentFilesDir = nullptr; - } clear(); } @@ -109,20 +103,6 @@ void NodeHelper::setNodeUnprocessed(KMime::Content *node, bool recurse) } mProcessedNodes.removeAll(node); - //avoid double addition of extra nodes, eg. encrypted attachments - const QMap >::iterator it = mExtraContents.find(node); - if (it != mExtraContents.end()) { - Q_FOREACH (KMime::Content *c, it.value()) { - KMime::Content *p = c->parent(); - if (p) { - p->removeContent(c); - } - } - qDeleteAll(it.value()); - qCDebug(MIMETREEPARSER_LOG) << "mExtraContents deleted for" << it.key(); - mExtraContents.erase(it); - } - qCDebug(MIMETREEPARSER_LOG) << "Node UNprocessed: " << node; if (recurse) { const auto contents = node->contents(); @@ -144,19 +124,6 @@ void NodeHelper::clear() { mProcessedNodes.clear(); mOverrideCodecs.clear(); - QMap >::ConstIterator end(mExtraContents.constEnd()); - - for (QMap >::ConstIterator it = mExtraContents.constBegin(); it != end; ++it) { - Q_FOREACH (KMime::Content *c, it.value()) { - KMime::Content *p = c->parent(); - if (p) { - p->removeContent(c); - } - } - qDeleteAll(it.value()); - qCDebug(MIMETREEPARSER_LOG) << "mExtraContents deleted for" << it.key(); - } - mExtraContents.clear(); } @@ -170,25 +137,6 @@ void NodeHelper::setPartMetaData(KMime::Content *node, const PartMetaData &metaD mPartMetaDatas.insert(node, metaData); } -void NodeHelper::forceCleanTempFiles() -{ - mAttachmentFilesDir->forceCleanTempFiles(); - delete mAttachmentFilesDir; - mAttachmentFilesDir = nullptr; -} - -void NodeHelper::removeTempFiles() -{ - //Don't delete it it will delete in class - mAttachmentFilesDir->removeTempFiles(); - mAttachmentFilesDir = new AttachmentTemporaryFilesDirs(); -} - -void NodeHelper::addTempFile(const QString &file) -{ - mAttachmentFilesDir->addTempFile(file); -} - bool NodeHelper::isInEncapsulatedMessage(KMime::Content *node) { const KMime::Content *const topLevel = node->topLevel(); @@ -278,114 +226,6 @@ QString NodeHelper::fileName(const KMime::Content *node) return name; } -/*! - Creates a persistent index string that bridges the gap between the - permanent nodes and the temporary ones. - - Used internally for robust indexing. -*/ -QString NodeHelper::persistentIndex(const KMime::Content *node) const -{ - if (!node) { - return QString(); - } - - QString indexStr = node->index().toString(); - if (indexStr.isEmpty()) { - QMapIterator > it(mExtraContents); - while (it.hasNext()) { - it.next(); - const auto &extraNodes = it.value(); - for (int i = 0; i < extraNodes.size(); i++) { - if (extraNodes[i] == node) { - indexStr = QString::fromLatin1("e%1").arg(i); - const QString parentIndex = persistentIndex(it.key()); - if (!parentIndex.isEmpty()) { - indexStr = QString::fromLatin1("%1:%2").arg(parentIndex, indexStr); - } - qWarning() << "Persistentindex: " << indexStr; - return indexStr; - } - } - } - } else { - const KMime::Content *const topLevel = node->topLevel(); - //if the node is an extra node, prepend the index of the extra node to the url - QMapIterator > it(mExtraContents); - while (it.hasNext()) { - it.next(); - const QList &extraNodes = extraContents(it.key()); - for (int i = 0; i < extraNodes.size(); ++i) { - KMime::Content *const extraNode = extraNodes[i]; - if (topLevel == extraNode) { - indexStr.prepend(QStringLiteral("e%1:").arg(i)); - const QString parentIndex = persistentIndex(it.key()); - if (!parentIndex.isEmpty()) { - indexStr = QStringLiteral("%1:%2").arg(parentIndex, indexStr); - } - qWarning() << "Persistentindex: " << indexStr; - return indexStr; - } - } - } - } - - qWarning() << "Persistentindex: " << indexStr; - return indexStr; -} - -KMime::Content *NodeHelper::contentFromIndex(KMime::Content *node, const QString &persistentIndex) const -{ - KMime::Content *c = node->topLevel(); - if (c) { - const QStringList pathParts = persistentIndex.split(QLatin1Char(':'), QString::SkipEmptyParts); - const int pathPartsSize(pathParts.size()); - for (int i = 0; i < pathPartsSize; ++i) { - const QString &path = pathParts[i]; - if (path.startsWith(QLatin1Char('e'))) { - const QList &extraParts = mExtraContents.value(c); - const int idx = path.midRef(1, -1).toInt(); - c = (idx < extraParts.size()) ? extraParts[idx] : nullptr; - } else { - c = c->content(KMime::ContentIndex(path)); - } - if (!c) { - break; - } - } - } - return c; -} - -QString NodeHelper::asHREF(const KMime::Content *node, const QString &place) const -{ - return QStringLiteral("attachment:%1?place=%2").arg(persistentIndex(node), place); -} - -KMime::Content *NodeHelper::fromHREF(const KMime::Message::Ptr &mMessage, const QUrl &url) const -{ - if (url.isEmpty()) { - return mMessage.data(); - } - - if (!url.isLocalFile()) { - return contentFromIndex(mMessage.data(), url.adjusted(QUrl::StripTrailingSlash).path()); - } else { - const QString path = url.toLocalFile(); - // extract from //qttestn28554.index.2.3:0:2/unnamed -> "2.3:0:2" - // start of the index is something that is not a number followed by a dot: \D. - // index is only made of numbers,"." and ":": ([0-9.:]+) - // index is the last part of the folder name: / - const QRegExp rIndex(QStringLiteral("\\D\\.([e0-9.:]+)/")); - - //search the occurence at most at the end - if (rIndex.lastIndexIn(path) != -1) { - return contentFromIndex(mMessage.data(), rIndex.cap(1)); - } - return mMessage.data(); - } -} - QString NodeHelper::fixEncoding(const QString &encoding) { QString returnEncoding = encoding; @@ -432,28 +272,17 @@ QString NodeHelper::fromAsString(KMime::Content *node) const { if (auto topLevel = dynamic_cast(node->topLevel())) { return topLevel->from()->asUnicodeString(); - } else { - auto realNode = std::find_if(mExtraContents.cbegin(), mExtraContents.cend(), - [node](const QList &nodes) { - return nodes.contains(node); - }); - if (realNode != mExtraContents.cend()) { - return fromAsString(realNode.key()); - } + // } else { + // auto realNode = std::find_if(mExtraContents.cbegin(), mExtraContents.cend(), + // [node](const QList &nodes) { + // return nodes.contains(node); + // }); + // if (realNode != mExtraContents.cend()) { + // return fromAsString(realNode.key()); + // } } return QString(); } -void NodeHelper::attachExtraContent(KMime::Content *topLevelNode, KMime::Content *content) -{ - qCDebug(MIMETREEPARSER_LOG) << "mExtraContents added for" << topLevelNode << " extra content: " << content; - mExtraContents[topLevelNode].append(content); -} - -QList< KMime::Content * > NodeHelper::extraContents(KMime::Content *topLevelnode) const -{ - return mExtraContents.value(topLevelnode); -} - } 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,33 +70,12 @@ public: */ void magicSetType(KMime::Content *node, bool autoDecode = true); - /** Attach an extra node to an existing node */ - void attachExtraContent(KMime::Content *topLevelNode, KMime::Content *content); - - /** Get the extra nodes attached to the @param topLevelNode and all sub-nodes of @param topLevelNode */ - QList extraContents(KMime::Content *topLevelNode) const; - /** Get a QTextCodec suitable for this message part */ const QTextCodec *codec(KMime::Content *node); /** Set the charset the user selected for the message to display */ void setOverrideCodec(KMime::Content *node, const QTextCodec *codec); - /** - * Cleanup the attachment temp files - */ - void removeTempFiles(); - - /** - * Add a file to the list of managed temporary files - */ - void addTempFile(const QString &file); - - // Get a href in the form attachment:?place=, used by ObjectTreeParser and - // UrlHandlerManager. - QString asHREF(const KMime::Content *node, const QString &place) const; - KMime::Content *fromHREF(const KMime::Message::Ptr &mMessage, const QUrl &href) const; - /** * @return true if this node is a child or an encapsulated message */ @@ -152,19 +131,6 @@ private: bool unencryptedMessage_helper(KMime::Content *node, QByteArray &resultingData, bool addHeaders, int recursionLevel = 1); - /** Creates a persistent index string that bridges the gap between the - permanent nodes and the temporary ones. - - Used internally for robust indexing. - **/ - QString persistentIndex(const KMime::Content *node) const; - - /** Translates the persistentIndex into a node back - - node: any node of the actually message to what the persistentIndex is interpreded - **/ - KMime::Content *contentFromIndex(KMime::Content *node, const QString &persistentIndex) const; - private: QList mProcessedNodes; QList mNodesUnderProcess; @@ -173,8 +139,6 @@ private: QTextCodec *mLocalCodec; QMap mOverrideCodecs; QMap mPartMetaDatas; - QMap > mExtraContents; - AttachmentTemporaryFilesDirs *mAttachmentFilesDir; friend class NodeHelperTest; }; 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 if (!newNode->head().isEmpty()) { newNode->contentDescription()->from7BitString(cntDesc); } - part.nodeHelper()->attachExtraContent(parentNode, newNode); return MimeMessagePart::Ptr(new MimeMessagePart(part.objectTreeParser(), newNode, false)); } -- cgit v1.2.3