diff options
author | Sandro Knauß <sknauss@kde.org> | 2016-08-10 13:20:11 +0200 |
---|---|---|
committer | Sandro Knauß <sknauss@kde.org> | 2016-08-10 13:20:11 +0200 |
commit | 349e404b539c1f9d1feb54658e2e6fbbd2165462 (patch) | |
tree | b10dc19fba26c0655e918d7e355ae6f54cc8e170 /framework/domain/messageparser.cpp | |
parent | 92d6fbd8f6a504da869454ca85f861e30c89a73c (diff) | |
download | kube-349e404b539c1f9d1feb54658e2e6fbbd2165462.tar.gz kube-349e404b539c1f9d1feb54658e2e6fbbd2165462.zip |
Use new mimetreeparser interface
Diffstat (limited to 'framework/domain/messageparser.cpp')
-rw-r--r-- | framework/domain/messageparser.cpp | 49 |
1 files changed, 39 insertions, 10 deletions
diff --git a/framework/domain/messageparser.cpp b/framework/domain/messageparser.cpp index 8363e119..262be0b7 100644 --- a/framework/domain/messageparser.cpp +++ b/framework/domain/messageparser.cpp | |||
@@ -21,6 +21,10 @@ | |||
21 | #include "stringhtmlwriter.h" | 21 | #include "stringhtmlwriter.h" |
22 | #include "objecttreesource.h" | 22 | #include "objecttreesource.h" |
23 | 23 | ||
24 | #include "mimetreeparser/interface.h" | ||
25 | |||
26 | #include <QRegExp> | ||
27 | |||
24 | #include <QFile> | 28 | #include <QFile> |
25 | #include <QImage> | 29 | #include <QImage> |
26 | #include <QDebug> | 30 | #include <QDebug> |
@@ -29,7 +33,9 @@ | |||
29 | #include <MimeTreeParser/ObjectTreeParser> | 33 | #include <MimeTreeParser/ObjectTreeParser> |
30 | #include <MimeTreeParser/MessagePart> | 34 | #include <MimeTreeParser/MessagePart> |
31 | 35 | ||
32 | PartModel::PartModel(QSharedPointer<MimeTreeParser::MessagePart> partTree, QMap<QByteArray, QUrl> embeddedPartMap) : mPartTree(partTree), mEmbeddedPartMap(embeddedPartMap) | 36 | PartModel::PartModel(QSharedPointer<MimeTreeParser::MessagePart> partTree, std::shared_ptr<Parser> parser) |
37 | : mPartTree(partTree) | ||
38 | , mParser(parser) | ||
33 | { | 39 | { |
34 | } | 40 | } |
35 | 41 | ||
@@ -73,8 +79,14 @@ QVariant PartModel::data(const QModelIndex &index, int role) const | |||
73 | // qDebug() << "Getting text: " << part->property("text").toString(); | 79 | // qDebug() << "Getting text: " << part->property("text").toString(); |
74 | // FIXME: we should have a list per part, and not one for all parts. | 80 | // FIXME: we should have a list per part, and not one for all parts. |
75 | auto text = part->property("htmlContent").toString(); | 81 | auto text = part->property("htmlContent").toString(); |
76 | for (const auto &cid : mEmbeddedPartMap.keys()) { | 82 | auto rx = QRegExp("src=(\"|')cid:([^\1]*)\1"); |
77 | text.replace(QString("src=\"cid:%1\"").arg(QString(cid)), QString("src=\"%1\"").arg(mEmbeddedPartMap.value(cid).toString())); | 83 | int pos = 0; |
84 | while ((pos = rx.indexIn(text, pos)) != -1) { | ||
85 | auto repl = mParser->getPart(rx.cap(2).toUtf8()); | ||
86 | if (repl.isValid()) { | ||
87 | text.replace(rx.cap(0), QString("src=\"%1\"").arg(repl.toString())); | ||
88 | } | ||
89 | pos += rx.matchedLength(); | ||
78 | } | 90 | } |
79 | return text; | 91 | return text; |
80 | } | 92 | } |
@@ -140,16 +152,31 @@ int PartModel::columnCount(const QModelIndex &parent) const | |||
140 | return 1; | 152 | return 1; |
141 | } | 153 | } |
142 | 154 | ||
155 | class MessagePartPrivate | ||
156 | { | ||
157 | public: | ||
158 | QSharedPointer<MimeTreeParser::MessagePart> mPartTree; | ||
159 | QString mHtml; | ||
160 | QMap<QByteArray, QUrl> mEmbeddedPartMap; | ||
161 | std::shared_ptr<MimeTreeParser::NodeHelper> mNodeHelper; | ||
162 | std::shared_ptr<Parser> mParser; | ||
163 | }; | ||
143 | 164 | ||
144 | MessageParser::MessageParser(QObject *parent) | 165 | MessageParser::MessageParser(QObject *parent) |
145 | : QObject(parent) | 166 | : QObject(parent) |
167 | , d(std::unique_ptr<MessagePartPrivate>(new MessagePartPrivate)) | ||
168 | { | ||
169 | |||
170 | } | ||
171 | |||
172 | MessageParser::~MessageParser() | ||
146 | { | 173 | { |
147 | 174 | ||
148 | } | 175 | } |
149 | 176 | ||
150 | QString MessageParser::html() const | 177 | QString MessageParser::html() const |
151 | { | 178 | { |
152 | return mHtml; | 179 | return d->mHtml; |
153 | } | 180 | } |
154 | 181 | ||
155 | QVariant MessageParser::message() const | 182 | QVariant MessageParser::message() const |
@@ -161,6 +188,8 @@ void MessageParser::setMessage(const QVariant &message) | |||
161 | { | 188 | { |
162 | QTime time; | 189 | QTime time; |
163 | time.start(); | 190 | time.start(); |
191 | d->mParser = std::shared_ptr<Parser>(new Parser(message.toByteArray())); | ||
192 | |||
164 | const auto mailData = KMime::CRLFtoLF(message.toByteArray()); | 193 | const auto mailData = KMime::CRLFtoLF(message.toByteArray()); |
165 | KMime::Message::Ptr msg(new KMime::Message); | 194 | KMime::Message::Ptr msg(new KMime::Message); |
166 | msg->setContent(mailData); | 195 | msg->setContent(mailData); |
@@ -170,20 +199,20 @@ void MessageParser::setMessage(const QVariant &message) | |||
170 | // render the mail | 199 | // render the mail |
171 | StringHtmlWriter htmlWriter; | 200 | StringHtmlWriter htmlWriter; |
172 | //temporary files only have the lifetime of the nodehelper, so we keep it around until the mail changes. | 201 | //temporary files only have the lifetime of the nodehelper, so we keep it around until the mail changes. |
173 | mNodeHelper = std::make_shared<MimeTreeParser::NodeHelper>(); | 202 | d->mNodeHelper = std::make_shared<MimeTreeParser::NodeHelper>(); |
174 | ObjectTreeSource source(&htmlWriter); | 203 | ObjectTreeSource source(&htmlWriter); |
175 | MimeTreeParser::ObjectTreeParser otp(&source, mNodeHelper.get()); | 204 | MimeTreeParser::ObjectTreeParser otp(&source, d->mNodeHelper.get()); |
176 | 205 | ||
177 | otp.parseObjectTree(msg.data()); | 206 | otp.parseObjectTree(msg.data()); |
178 | mPartTree = otp.parsedPart().dynamicCast<MimeTreeParser::MessagePart>(); | 207 | d->mPartTree = otp.parsedPart().dynamicCast<MimeTreeParser::MessagePart>(); |
179 | 208 | ||
180 | mEmbeddedPartMap = htmlWriter.embeddedParts(); | 209 | d->mEmbeddedPartMap = htmlWriter.embeddedParts(); |
181 | mHtml = htmlWriter.html(); | 210 | d->mHtml = htmlWriter.html(); |
182 | emit htmlChanged(); | 211 | emit htmlChanged(); |
183 | } | 212 | } |
184 | 213 | ||
185 | QAbstractItemModel *MessageParser::partTree() const | 214 | QAbstractItemModel *MessageParser::partTree() const |
186 | { | 215 | { |
187 | return new PartModel(mPartTree, mEmbeddedPartMap); | 216 | return new PartModel(d->mPartTree, d->mParser); |
188 | } | 217 | } |
189 | 218 | ||