From b7a02699eefd84c68ff602bfea91640faec5c4ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20Knau=C3=9F?= Date: Mon, 17 Oct 2016 13:05:43 +0200 Subject: find part by cid --- framework/domain/mimetreeparser/interface.cpp | 34 +++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'framework/domain/mimetreeparser/interface.cpp') diff --git a/framework/domain/mimetreeparser/interface.cpp b/framework/domain/mimetreeparser/interface.cpp index ab56f800..c2fd1e65 100644 --- a/framework/domain/mimetreeparser/interface.cpp +++ b/framework/domain/mimetreeparser/interface.cpp @@ -56,6 +56,14 @@ MailMime::MailMime() { } +QByteArray MailMime::cid() const +{ + if (!d->mNode || !d->mNode->contentID()) { + return QByteArray(); + } + return d->mNode->contentID()->identifier(); +} + bool MailMime::isFirstTextPart() const { if (!d->mNode || !d->mNode->topLevel()) { @@ -750,9 +758,16 @@ Parser::~Parser() { } -QUrl Parser::getPart(const QByteArray &cid) +Part::Ptr Parser::getPart(const QUrl &url) { - return d->mEmbeddedPartMap.value(cid); + if (url.scheme() == QStringLiteral("cid") && !url.path().isEmpty()) { + const auto cid = url.path(); + return find(d->mTree, [&cid](const Part::Ptr &p){ + const auto mime = p->mailMime(); + return mime->cid() == cid; + }); + } + return Part::Ptr(); } QVector Parser::collectContentParts() const @@ -857,6 +872,7 @@ QVector Parser::collectAttachmentParts() const return true; }); } + QVector Parser::collect(const Part::Ptr &start, std::function select, std::function filter) const { QVector ret; @@ -879,3 +895,17 @@ QVector Parser::collect(const Part::Ptr &start, std::function select) const +{ + foreach (const auto &part, start->subParts()) { + if (select(part)) { + return part; + } + const auto ret = find(part, select); + if (ret) { + return ret; + } + } + return Part::Ptr(); +} -- cgit v1.2.3