summaryrefslogtreecommitdiffstats
path: root/framework/domain/mimetreeparser/interface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'framework/domain/mimetreeparser/interface.cpp')
-rw-r--r--framework/domain/mimetreeparser/interface.cpp34
1 files changed, 32 insertions, 2 deletions
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()
56{ 56{
57} 57}
58 58
59QByteArray MailMime::cid() const
60{
61 if (!d->mNode || !d->mNode->contentID()) {
62 return QByteArray();
63 }
64 return d->mNode->contentID()->identifier();
65}
66
59bool MailMime::isFirstTextPart() const 67bool MailMime::isFirstTextPart() const
60{ 68{
61 if (!d->mNode || !d->mNode->topLevel()) { 69 if (!d->mNode || !d->mNode->topLevel()) {
@@ -750,9 +758,16 @@ Parser::~Parser()
750{ 758{
751} 759}
752 760
753QUrl Parser::getPart(const QByteArray &cid) 761Part::Ptr Parser::getPart(const QUrl &url)
754{ 762{
755 return d->mEmbeddedPartMap.value(cid); 763 if (url.scheme() == QStringLiteral("cid") && !url.path().isEmpty()) {
764 const auto cid = url.path();
765 return find(d->mTree, [&cid](const Part::Ptr &p){
766 const auto mime = p->mailMime();
767 return mime->cid() == cid;
768 });
769 }
770 return Part::Ptr();
756} 771}
757 772
758QVector<Part::Ptr> Parser::collectContentParts() const 773QVector<Part::Ptr> Parser::collectContentParts() const
@@ -857,6 +872,7 @@ QVector<Part::Ptr> Parser::collectAttachmentParts() const
857 return true; 872 return true;
858 }); 873 });
859} 874}
875
860QVector<Part::Ptr> Parser::collect(const Part::Ptr &start, std::function<bool(const Part::Ptr &)> select, std::function<bool(const Content::Ptr &)> filter) const 876QVector<Part::Ptr> Parser::collect(const Part::Ptr &start, std::function<bool(const Part::Ptr &)> select, std::function<bool(const Content::Ptr &)> filter) const
861{ 877{
862 QVector<Part::Ptr> ret; 878 QVector<Part::Ptr> ret;
@@ -879,3 +895,17 @@ QVector<Part::Ptr> Parser::collect(const Part::Ptr &start, std::function<bool(co
879 } 895 }
880 return ret; 896 return ret;
881} 897}
898
899Part::Ptr Parser::find(const Part::Ptr &start, std::function<bool(const Part::Ptr &)> select) const
900{
901 foreach (const auto &part, start->subParts()) {
902 if (select(part)) {
903 return part;
904 }
905 const auto ret = find(part, select);
906 if (ret) {
907 return ret;
908 }
909 }
910 return Part::Ptr();
911}