diff options
Diffstat (limited to 'framework/domain/mimetreeparser/interface.cpp')
-rw-r--r-- | framework/domain/mimetreeparser/interface.cpp | 55 |
1 files changed, 22 insertions, 33 deletions
diff --git a/framework/domain/mimetreeparser/interface.cpp b/framework/domain/mimetreeparser/interface.cpp index c239fcc0..e34ffda7 100644 --- a/framework/domain/mimetreeparser/interface.cpp +++ b/framework/domain/mimetreeparser/interface.cpp | |||
@@ -18,6 +18,7 @@ | |||
18 | */ | 18 | */ |
19 | 19 | ||
20 | #include "interface.h" | 20 | #include "interface.h" |
21 | #include "interface_p.h" | ||
21 | 22 | ||
22 | #include "stringhtmlwriter.h" | 23 | #include "stringhtmlwriter.h" |
23 | #include "objecttreesource.h" | 24 | #include "objecttreesource.h" |
@@ -28,7 +29,6 @@ | |||
28 | #include <MimeTreeParser/NodeHelper> | 29 | #include <MimeTreeParser/NodeHelper> |
29 | 30 | ||
30 | #include <QDebug> | 31 | #include <QDebug> |
31 | #include <QImage> | ||
32 | 32 | ||
33 | class PartPrivate | 33 | class PartPrivate |
34 | { | 34 | { |
@@ -164,34 +164,42 @@ public: | |||
164 | void fillFrom(MimeTreeParser::HtmlMessagePart::Ptr part); | 164 | void fillFrom(MimeTreeParser::HtmlMessagePart::Ptr part); |
165 | void fillFrom(MimeTreeParser::AlternativeMessagePart::Ptr part); | 165 | void fillFrom(MimeTreeParser::AlternativeMessagePart::Ptr part); |
166 | 166 | ||
167 | QVector<Content::Ptr> content() const; | 167 | QVector<Content::Ptr> content(ContentPart::Type ct) const; |
168 | 168 | ||
169 | ContentPart *q; | 169 | ContentPart *q; |
170 | 170 | ||
171 | ContentPart::Types types() const; | 171 | ContentPart::Types types() const; |
172 | 172 | ||
173 | private: | 173 | private: |
174 | QVector<Content::Ptr> mContent; | 174 | QMap<ContentPart::Type, QVector<Content::Ptr>> mContent; |
175 | ContentPart::Types mTypes; | 175 | ContentPart::Types mTypes; |
176 | }; | 176 | }; |
177 | 177 | ||
178 | void ContentPartPrivate::fillFrom(MimeTreeParser::TextMessagePart::Ptr part) | 178 | void ContentPartPrivate::fillFrom(MimeTreeParser::TextMessagePart::Ptr part) |
179 | { | 179 | { |
180 | qDebug() << "jepp"; | ||
180 | mTypes = ContentPart::PlainText; | 181 | mTypes = ContentPart::PlainText; |
181 | foreach (const auto &mp, part->subParts()) { | 182 | foreach (const auto &mp, part->subParts()) { |
182 | auto content = std::make_shared<Content>(mp->text().toLocal8Bit(), q); | 183 | auto content = std::make_shared<Content>(mp->text().toLocal8Bit(), q); |
183 | mContent.append(content); | 184 | mContent[ContentPart::PlainText].append(content); |
184 | } | 185 | } |
185 | } | 186 | } |
186 | 187 | ||
187 | void ContentPartPrivate::fillFrom(MimeTreeParser::HtmlMessagePart::Ptr part) | 188 | void ContentPartPrivate::fillFrom(MimeTreeParser::HtmlMessagePart::Ptr part) |
188 | { | 189 | { |
189 | mTypes = ContentPart::Html; | 190 | mTypes = ContentPart::Html; |
191 | auto content = std::make_shared<Content>(part->text().toLocal8Bit(), q); | ||
192 | mContent[ContentPart::Html].append(content); | ||
190 | } | 193 | } |
191 | 194 | ||
192 | void ContentPartPrivate::fillFrom(MimeTreeParser::AlternativeMessagePart::Ptr part) | 195 | void ContentPartPrivate::fillFrom(MimeTreeParser::AlternativeMessagePart::Ptr part) |
193 | { | 196 | { |
194 | mTypes = ContentPart::Html | ContentPart::PlainText; | 197 | mTypes = ContentPart::Html | ContentPart::PlainText; |
198 | |||
199 | auto content = std::make_shared<Content>(part->htmlContent().toLocal8Bit(), q); | ||
200 | mContent[ContentPart::Html].append(content); | ||
201 | content = std::make_shared<Content>(part->plaintextContent().toLocal8Bit(), q); | ||
202 | mContent[ContentPart::PlainText].append(content); | ||
195 | } | 203 | } |
196 | 204 | ||
197 | ContentPart::Types ContentPartPrivate::types() const | 205 | ContentPart::Types ContentPartPrivate::types() const |
@@ -199,14 +207,14 @@ ContentPart::Types ContentPartPrivate::types() const | |||
199 | return mTypes; | 207 | return mTypes; |
200 | } | 208 | } |
201 | 209 | ||
202 | QVector<Content::Ptr> ContentPartPrivate::content() const | 210 | QVector<Content::Ptr> ContentPartPrivate::content(ContentPart::Type ct) const |
203 | { | 211 | { |
204 | return mContent; | 212 | return mContent[ct]; |
205 | } | 213 | } |
206 | 214 | ||
207 | QVector<Content::Ptr> ContentPart::content(ContentPart::Type ct) const | 215 | QVector<Content::Ptr> ContentPart::content(ContentPart::Type ct) const |
208 | { | 216 | { |
209 | return d->content(); | 217 | return d->content(ct); |
210 | } | 218 | } |
211 | 219 | ||
212 | 220 | ||
@@ -258,24 +266,6 @@ QByteArray AttachmentPart::type() const | |||
258 | return "AttachmentPart"; | 266 | return "AttachmentPart"; |
259 | } | 267 | } |
260 | 268 | ||
261 | class ParserPrivate | ||
262 | { | ||
263 | public: | ||
264 | ParserPrivate(Parser *parser); | ||
265 | |||
266 | void setMessage(const QByteArray &mimeMessage); | ||
267 | void createTree(const MimeTreeParser::MessagePart::Ptr& start, const Part::Ptr& tree); | ||
268 | |||
269 | Part::Ptr mTree; | ||
270 | private: | ||
271 | Parser *q; | ||
272 | |||
273 | MimeTreeParser::MessagePart::Ptr mPartTree; | ||
274 | std::shared_ptr<MimeTreeParser::NodeHelper> mNodeHelper; | ||
275 | QString mHtml; | ||
276 | QMap<QByteArray, QUrl> mEmbeddedPartMap; | ||
277 | }; | ||
278 | |||
279 | ParserPrivate::ParserPrivate(Parser* parser) | 269 | ParserPrivate::ParserPrivate(Parser* parser) |
280 | : q(parser) | 270 | : q(parser) |
281 | , mNodeHelper(std::make_shared<MimeTreeParser::NodeHelper>()) | 271 | , mNodeHelper(std::make_shared<MimeTreeParser::NodeHelper>()) |
@@ -292,7 +282,6 @@ void ParserPrivate::setMessage(const QByteArray& mimeMessage) | |||
292 | 282 | ||
293 | // render the mail | 283 | // render the mail |
294 | StringHtmlWriter htmlWriter; | 284 | StringHtmlWriter htmlWriter; |
295 | QImage paintDevice; | ||
296 | ObjectTreeSource source(&htmlWriter); | 285 | ObjectTreeSource source(&htmlWriter); |
297 | MimeTreeParser::ObjectTreeParser otp(&source, mNodeHelper.get()); | 286 | MimeTreeParser::ObjectTreeParser otp(&source, mNodeHelper.get()); |
298 | 287 | ||
@@ -315,7 +304,11 @@ void ParserPrivate::createTree(const MimeTreeParser::MessagePart::Ptr &start, co | |||
315 | const auto alternative = mp.dynamicCast<MimeTreeParser::AlternativeMessagePart>(); | 304 | const auto alternative = mp.dynamicCast<MimeTreeParser::AlternativeMessagePart>(); |
316 | const auto html = mp.dynamicCast<MimeTreeParser::HtmlMessagePart>(); | 305 | const auto html = mp.dynamicCast<MimeTreeParser::HtmlMessagePart>(); |
317 | const auto attachment = mp.dynamicCast<MimeTreeParser::AttachmentMessagePart>(); | 306 | const auto attachment = mp.dynamicCast<MimeTreeParser::AttachmentMessagePart>(); |
318 | if (text) { | 307 | if (attachment) { |
308 | auto part = std::make_shared<AttachmentPart>(); | ||
309 | part->d->fillFrom(attachment); | ||
310 | mTree->d->appendSubPart(part); | ||
311 | } else if (text) { | ||
319 | auto part = std::make_shared<ContentPart>(); | 312 | auto part = std::make_shared<ContentPart>(); |
320 | part->d->fillFrom(text); | 313 | part->d->fillFrom(text); |
321 | mTree->d->appendSubPart(part); | 314 | mTree->d->appendSubPart(part); |
@@ -327,10 +320,6 @@ void ParserPrivate::createTree(const MimeTreeParser::MessagePart::Ptr &start, co | |||
327 | auto part = std::make_shared<ContentPart>(); | 320 | auto part = std::make_shared<ContentPart>(); |
328 | part->d->fillFrom(html); | 321 | part->d->fillFrom(html); |
329 | mTree->d->appendSubPart(part); | 322 | mTree->d->appendSubPart(part); |
330 | } else if (attachment) { | ||
331 | auto part = std::make_shared<AttachmentPart>(); | ||
332 | part->d->fillFrom(attachment); | ||
333 | mTree->d->appendSubPart(part); | ||
334 | } else { | 323 | } else { |
335 | createTree(m, tree); | 324 | createTree(m, tree); |
336 | } | 325 | } |
@@ -349,7 +338,7 @@ Parser::~Parser() | |||
349 | 338 | ||
350 | ContentPart::Ptr Parser::collectContentPart(const Part::Ptr &start) const | 339 | ContentPart::Ptr Parser::collectContentPart(const Part::Ptr &start) const |
351 | { | 340 | { |
352 | const auto ret = collect<ContentPart>(start, [](const Part::Ptr &p){return p->type() == "ContentPart";}, [](const ContentPart::Ptr &p){return true;}); | 341 | const auto ret = collect<ContentPart>(start, [](const Part::Ptr &p){return p->type() == "ContentPart";}, [](const ContentPart::Ptr &p){return true;}); |
353 | if (ret.size() > 0) { | 342 | if (ret.size() > 0) { |
354 | return ret[0]; | 343 | return ret[0]; |
355 | }; | 344 | }; |