From cf5b3e797421e7dbf2c0d7b1efff91fc07277652 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20Knau=C3=9F?= Date: Wed, 20 Jul 2016 17:35:29 +0200 Subject: new thoughts for interface --- framework/domain/mimetreeparser/interface.cpp | 165 +++++++++++++++----------- 1 file changed, 97 insertions(+), 68 deletions(-) (limited to 'framework/domain/mimetreeparser/interface.cpp') diff --git a/framework/domain/mimetreeparser/interface.cpp b/framework/domain/mimetreeparser/interface.cpp index e34ffda7..aa7e3911 100644 --- a/framework/domain/mimetreeparser/interface.cpp +++ b/framework/domain/mimetreeparser/interface.cpp @@ -89,6 +89,16 @@ QByteArray Part::type() const return "Part"; } +QVector Part::availableContents() const +{ + return QVector(); +} + +QVector Part::content() const +{ + return QVector(); +} + QVector Part::encryptions() const { auto parent = d->parent(); @@ -118,7 +128,7 @@ public: Content *q; }; -Content::Content(const QByteArray& content, ContentPart *parent) +Content::Content(const QByteArray& content, Part *parent) : d(std::unique_ptr(new ContentPrivate)) { d->q = this; @@ -157,113 +167,141 @@ QByteArray Content::charset() const return d->mCodec; } -class ContentPartPrivate +class AlternativePartPrivate { public: - void fillFrom(MimeTreeParser::TextMessagePart::Ptr part); - void fillFrom(MimeTreeParser::HtmlMessagePart::Ptr part); void fillFrom(MimeTreeParser::AlternativeMessagePart::Ptr part); - QVector content(ContentPart::Type ct) const; + QVector content(const QByteArray &ct) const; - ContentPart *q; + AlternativePart *q; - ContentPart::Types types() const; + QVector types() const; private: - QMap> mContent; - ContentPart::Types mTypes; + QMap> mContent; + QVector mTypes; }; -void ContentPartPrivate::fillFrom(MimeTreeParser::TextMessagePart::Ptr part) +void AlternativePartPrivate::fillFrom(MimeTreeParser::AlternativeMessagePart::Ptr part) { - qDebug() << "jepp"; - mTypes = ContentPart::PlainText; - foreach (const auto &mp, part->subParts()) { - auto content = std::make_shared(mp->text().toLocal8Bit(), q); - mContent[ContentPart::PlainText].append(content); - } + mTypes = QVector() << "html" << "plaintext"; + + auto content = std::make_shared(part->htmlContent().toLocal8Bit(), q); + mContent["html"].append(content); + content = std::make_shared(part->plaintextContent().toLocal8Bit(), q); + mContent["plaintext"].append(content); } -void ContentPartPrivate::fillFrom(MimeTreeParser::HtmlMessagePart::Ptr part) +QVector AlternativePartPrivate::types() const { - mTypes = ContentPart::Html; - auto content = std::make_shared(part->text().toLocal8Bit(), q); - mContent[ContentPart::Html].append(content); + return mTypes; } -void ContentPartPrivate::fillFrom(MimeTreeParser::AlternativeMessagePart::Ptr part) +QVector AlternativePartPrivate::content(const QByteArray& ct) const { - mTypes = ContentPart::Html | ContentPart::PlainText; + return mContent[ct]; +} - auto content = std::make_shared(part->htmlContent().toLocal8Bit(), q); - mContent[ContentPart::Html].append(content); - content = std::make_shared(part->plaintextContent().toLocal8Bit(), q); - mContent[ContentPart::PlainText].append(content); +AlternativePart::AlternativePart() + : d(std::unique_ptr(new AlternativePartPrivate)) +{ + d->q = this; } -ContentPart::Types ContentPartPrivate::types() const +AlternativePart::~AlternativePart() { - return mTypes; + } -QVector ContentPartPrivate::content(ContentPart::Type ct) const +QByteArray AlternativePart::type() const { - return mContent[ct]; + return "AlternativePart"; } -QVector ContentPart::content(ContentPart::Type ct) const +QVector AlternativePart::availableContents() const { - return d->content(ct); + return d->types(); } +QVector AlternativePart::content() const +{ + return d->content(availableContents().first()); +} -ContentPart::ContentPart() - : d(std::unique_ptr(new ContentPartPrivate)) +QVector AlternativePart::content(const QByteArray& ct) const { - d->q = this; + return d->content(ct); } -ContentPart::~ContentPart() +class SinglePartPrivate { +public: + void fillFrom(MimeTreeParser::TextMessagePart::Ptr part); + void fillFrom(MimeTreeParser::HtmlMessagePart::Ptr part); + void fillFrom(MimeTreeParser::AttachmentMessagePart::Ptr part); + SinglePart *q; + + QVector mContent; + QByteArray mType; +}; +void SinglePartPrivate::fillFrom(MimeTreeParser::TextMessagePart::Ptr part) +{ + mType = "plaintext"; + mContent.clear(); + foreach (const auto &mp, part->subParts()) { + mContent.append(std::make_shared(mp->text().toLocal8Bit(), q)); + } } -QByteArray ContentPart::type() const +void SinglePartPrivate::fillFrom(MimeTreeParser::HtmlMessagePart::Ptr part) { - return "ContentPart"; + mType = "html"; + mContent.clear(); + mContent.append(std::make_shared(part->text().toLocal8Bit(), q)); } -ContentPart::Types ContentPart::availableContents() const +void SinglePartPrivate::fillFrom(MimeTreeParser::AttachmentMessagePart::Ptr part) { - return d->types(); + } -class MimePartPrivate +SinglePart::SinglePart() + : d(std::unique_ptr(new SinglePartPrivate)) { -public: - void fillFrom(MimeTreeParser::MessagePart::Ptr part); -}; + d->q = this; +} -QByteArray MimePart::type() const +SinglePart::~SinglePart() { - return "MimePart"; + } -class AttachmentPartPrivate +QVector SinglePart::availableContents() const { -public: - void fillFrom(MimeTreeParser::AttachmentMessagePart::Ptr part); -}; + return QVector() << d->mType; +} -void AttachmentPartPrivate::fillFrom(MimeTreeParser::AttachmentMessagePart::Ptr part) +QVector< Content::Ptr > SinglePart::content() const { + return d->mContent; +} +QByteArray SinglePart::type() const +{ + return "SinglePart"; } -QByteArray AttachmentPart::type() const +class MimePartPrivate +{ +public: + void fillFrom(MimeTreeParser::MessagePart::Ptr part); +}; + +QByteArray MimePart::type() const { - return "AttachmentPart"; + return "MimePart"; } ParserPrivate::ParserPrivate(Parser* parser) @@ -309,15 +347,15 @@ void ParserPrivate::createTree(const MimeTreeParser::MessagePart::Ptr &start, co part->d->fillFrom(attachment); mTree->d->appendSubPart(part); } else if (text) { - auto part = std::make_shared(); + auto part = std::make_shared(); part->d->fillFrom(text); mTree->d->appendSubPart(part); } else if (alternative) { - auto part = std::make_shared(); + auto part = std::make_shared(); part->d->fillFrom(alternative); mTree->d->appendSubPart(part); } else if (html) { - auto part = std::make_shared(); + auto part = std::make_shared(); part->d->fillFrom(html); mTree->d->appendSubPart(part); } else { @@ -336,18 +374,9 @@ Parser::~Parser() { } -ContentPart::Ptr Parser::collectContentPart(const Part::Ptr &start) const +QVector Parser::collectContentParts() const { - const auto ret = collect(start, [](const Part::Ptr &p){return p->type() == "ContentPart";}, [](const ContentPart::Ptr &p){return true;}); - if (ret.size() > 0) { - return ret[0]; - }; - return ContentPart::Ptr(); -} - -ContentPart::Ptr Parser::collectContentPart() const -{ - return collectContentPart(d->mTree); + return collect(d->mTree, [](const Part::Ptr &p){return p->availableContents().indexOf("html") > -1 || p->availableContents().indexOf("text") > -1;}, [](const Part::Ptr &p){return true;}); } template @@ -364,4 +393,4 @@ QVector Parser::collect(const Part::Ptr &start, std::function