From 2989ba081341d01231bbf2efebd45b0d03958dd7 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 7 May 2018 11:05:47 +0200 Subject: Made structure available in debug view --- framework/qml/MailViewer.qml | 11 ++++++++ framework/src/domain/mime/messageparser.cpp | 8 ++++++ framework/src/domain/mime/messageparser.h | 3 ++- .../mime/mimetreeparser/objecttreeparser.cpp | 31 +++++++++++++--------- .../domain/mime/mimetreeparser/objecttreeparser.h | 1 + 5 files changed, 41 insertions(+), 13 deletions(-) diff --git a/framework/qml/MailViewer.qml b/framework/qml/MailViewer.qml index ef0cfa78..d18ed8e6 100644 --- a/framework/qml/MailViewer.qml +++ b/framework/qml/MailViewer.qml @@ -446,6 +446,17 @@ Rectangle { width: flickable.width height: childrenRect.height + TextEdit { + id: structure + width: parent.width + readOnly: true + selectByMouse: true + textFormat: TextEdit.PlainText + wrapMode: TextEdit.Wrap + height: implicitHeight + text: messageParser.structureAsString + } + TextEdit { id: rawContent width: parent.width diff --git a/framework/src/domain/mime/messageparser.cpp b/framework/src/domain/mime/messageparser.cpp index bc7535ec..2c190c80 100644 --- a/framework/src/domain/mime/messageparser.cpp +++ b/framework/src/domain/mime/messageparser.cpp @@ -68,6 +68,14 @@ QString MessageParser::rawContent() const return mRawContent; } +QString MessageParser::structureAsString() const +{ + if (!d->mParser) { + return nullptr; + } + return d->mParser->structureAsString(); +} + QAbstractItemModel *MessageParser::parts() const { if (!d->mParser) { diff --git a/framework/src/domain/mime/messageparser.h b/framework/src/domain/mime/messageparser.h index ba85973c..72945fea 100644 --- a/framework/src/domain/mime/messageparser.h +++ b/framework/src/domain/mime/messageparser.h @@ -43,6 +43,7 @@ class KUBE_EXPORT MessageParser : public QObject Q_PROPERTY (QAbstractItemModel* parts READ parts NOTIFY htmlChanged) Q_PROPERTY (QAbstractItemModel* attachments READ attachments NOTIFY htmlChanged) Q_PROPERTY (QString rawContent READ rawContent NOTIFY htmlChanged) + Q_PROPERTY (QString structureAsString READ structureAsString NOTIFY htmlChanged) public: explicit MessageParser(QObject *parent = Q_NULLPTR); @@ -53,7 +54,7 @@ public: QAbstractItemModel *parts() const; QAbstractItemModel *attachments() const; QString rawContent() const; - + QString structureAsString() const; signals: void htmlChanged(); diff --git a/framework/src/domain/mime/mimetreeparser/objecttreeparser.cpp b/framework/src/domain/mime/mimetreeparser/objecttreeparser.cpp index 0149f388..9fb73ffa 100644 --- a/framework/src/domain/mime/mimetreeparser/objecttreeparser.cpp +++ b/framework/src/domain/mime/mimetreeparser/objecttreeparser.cpp @@ -51,13 +51,11 @@ #include #include -// KDE includes - -// Qt includes #include #include #include #include +#include using namespace MimeTreeParser; @@ -175,7 +173,7 @@ QString ObjectTreeParser::htmlContent() return content; } -static void print(KMime::Content *node, const QString prefix = {}) +static void print(QTextStream &s, KMime::Content *node, const QString prefix = {}) { QByteArray mediaType("text"); QByteArray subType("plain"); @@ -184,28 +182,37 @@ static void print(KMime::Content *node, const QString prefix = {}) mediaType = node->contentType()->mediaType(); subType = node->contentType()->subType(); } - qWarning() << prefix << "!" << mediaType << subType << "isAttachment: " << KMime::isAttachment(node); + s << prefix << "!" << mediaType << subType << "isAttachment: " << KMime::isAttachment(node) << "\n"; for (const auto c: node->contents()) { - print(c, prefix + QLatin1String(" ")); + print(s, c, prefix + QLatin1String(" ")); } } -static void print(const MessagePart &messagePart, const QByteArray pre = {}) +static void print(QTextStream &s, const MessagePart &messagePart, const QByteArray pre = {}) { - qWarning() << pre << "#" << messagePart.metaObject()->className() << "isAttachment: " << messagePart.isAttachment(); + s << pre << "#" << messagePart.metaObject()->className() << "isAttachment: " << messagePart.isAttachment() << "\n"; for (const auto &p: messagePart.subParts()) { - print(*p, pre + " "); + print(s, *p, pre + " "); } } -void ObjectTreeParser::print() +QString ObjectTreeParser::structureAsString() const { + QString string; + QTextStream s{&string}; + if (mTopLevelContent) { - ::print(mTopLevelContent); + ::print(s, mTopLevelContent); } if (mParsedPart) { - ::print(*mParsedPart); + ::print(s, *mParsedPart); } + return string; +} + +void ObjectTreeParser::print() +{ + qInfo().noquote() << structureAsString(); } static KMime::Content *find(KMime::Content *node, const std::function &select) diff --git a/framework/src/domain/mime/mimetreeparser/objecttreeparser.h b/framework/src/domain/mime/mimetreeparser/objecttreeparser.h index 02f94700..1795c79c 100644 --- a/framework/src/domain/mime/mimetreeparser/objecttreeparser.h +++ b/framework/src/domain/mime/mimetreeparser/objecttreeparser.h @@ -240,6 +240,7 @@ public: virtual ~ObjectTreeParser(); + QString structureAsString() const; void print(); /** -- cgit v1.2.3