diff options
author | Sandro Knauß <sknauss@kde.org> | 2016-10-17 13:05:43 +0200 |
---|---|---|
committer | Sandro Knauß <sknauss@kde.org> | 2016-10-17 13:05:43 +0200 |
commit | b7a02699eefd84c68ff602bfea91640faec5c4ef (patch) | |
tree | 68b62e0ea267ae6fc94c4bda52d375ab8d1af551 | |
parent | 988f0fe074faef56c053742fb582d0bb7b980d90 (diff) | |
download | kube-b7a02699eefd84c68ff602bfea91640faec5c4ef.tar.gz kube-b7a02699eefd84c68ff602bfea91640faec5c4ef.zip |
find part by cid
-rw-r--r-- | framework/domain/mimetreeparser/interface.cpp | 34 | ||||
-rw-r--r-- | framework/domain/mimetreeparser/interface.h | 4 | ||||
-rw-r--r-- | framework/domain/mimetreeparser/tests/interfacetest.cpp | 9 |
3 files changed, 43 insertions, 4 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 | ||
59 | QByteArray MailMime::cid() const | ||
60 | { | ||
61 | if (!d->mNode || !d->mNode->contentID()) { | ||
62 | return QByteArray(); | ||
63 | } | ||
64 | return d->mNode->contentID()->identifier(); | ||
65 | } | ||
66 | |||
59 | bool MailMime::isFirstTextPart() const | 67 | bool 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 | ||
753 | QUrl Parser::getPart(const QByteArray &cid) | 761 | Part::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 | ||
758 | QVector<Part::Ptr> Parser::collectContentParts() const | 773 | QVector<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 | |||
860 | QVector<Part::Ptr> Parser::collect(const Part::Ptr &start, std::function<bool(const Part::Ptr &)> select, std::function<bool(const Content::Ptr &)> filter) const | 876 | QVector<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 | |||
899 | Part::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 | } | ||
diff --git a/framework/domain/mimetreeparser/interface.h b/framework/domain/mimetreeparser/interface.h index 4b569546..cc6c68d2 100644 --- a/framework/domain/mimetreeparser/interface.h +++ b/framework/domain/mimetreeparser/interface.h | |||
@@ -349,10 +349,10 @@ public: | |||
349 | Parser(const QByteArray &mimeMessage); | 349 | Parser(const QByteArray &mimeMessage); |
350 | ~Parser(); | 350 | ~Parser(); |
351 | 351 | ||
352 | Part::Ptr getPart(QUrl url); | 352 | Part::Ptr getPart(const QUrl &url); |
353 | QUrl getPart(const QByteArray &cid); | ||
354 | 353 | ||
355 | QVector<Part::Ptr> collect(const Part::Ptr &start, std::function<bool(const Part::Ptr &)> select, std::function<bool(const Content::Ptr &)> filter) const; | 354 | QVector<Part::Ptr> collect(const Part::Ptr &start, std::function<bool(const Part::Ptr &)> select, std::function<bool(const Content::Ptr &)> filter) const; |
355 | Part::Ptr find(const Part::Ptr &start, std::function<bool(const Part::Ptr &)> select) const; | ||
356 | QVector<Part::Ptr> collectContentParts() const; | 356 | QVector<Part::Ptr> collectContentParts() const; |
357 | QVector<Part::Ptr> collectAttachmentParts() const; | 357 | QVector<Part::Ptr> collectAttachmentParts() const; |
358 | //template <> QVector<ContentPart::Ptr> collect<ContentPart>() const; | 358 | //template <> QVector<ContentPart::Ptr> collect<ContentPart>() const; |
diff --git a/framework/domain/mimetreeparser/tests/interfacetest.cpp b/framework/domain/mimetreeparser/tests/interfacetest.cpp index 923a7446..d52606c2 100644 --- a/framework/domain/mimetreeparser/tests/interfacetest.cpp +++ b/framework/domain/mimetreeparser/tests/interfacetest.cpp | |||
@@ -240,6 +240,15 @@ private slots: | |||
240 | auto contentAttachmentList = parser.collectAttachmentParts(); | 240 | auto contentAttachmentList = parser.collectAttachmentParts(); |
241 | QCOMPARE(contentAttachmentList.size(), 0); | 241 | QCOMPARE(contentAttachmentList.size(), 0); |
242 | } | 242 | } |
243 | |||
244 | void testCidLink() | ||
245 | { | ||
246 | Parser parser(readMailFromFile("cid-links.mbox")); | ||
247 | printTree(parser.d->mTree,QString()); | ||
248 | QCOMPARE(parser.getPart(QUrl("cid:9359201d15e53f31a68c307b3369b6@info")), parser.d->mTree->subParts().at(1)); | ||
249 | QVERIFY(!parser.getPart(QUrl("cid:"))); | ||
250 | QVERIFY(!parser.getPart(QUrl("cid:unknown"))); | ||
251 | } | ||
243 | }; | 252 | }; |
244 | 253 | ||
245 | QTEST_GUILESS_MAIN(InterfaceTest) | 254 | QTEST_GUILESS_MAIN(InterfaceTest) |