summaryrefslogtreecommitdiffstats
path: root/framework/domain/mimetreeparser/interface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'framework/domain/mimetreeparser/interface.cpp')
-rw-r--r--framework/domain/mimetreeparser/interface.cpp55
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
33class PartPrivate 33class 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
173private: 173private:
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
178void ContentPartPrivate::fillFrom(MimeTreeParser::TextMessagePart::Ptr part) 178void 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
187void ContentPartPrivate::fillFrom(MimeTreeParser::HtmlMessagePart::Ptr part) 188void 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
192void ContentPartPrivate::fillFrom(MimeTreeParser::AlternativeMessagePart::Ptr part) 195void 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
197ContentPart::Types ContentPartPrivate::types() const 205ContentPart::Types ContentPartPrivate::types() const
@@ -199,14 +207,14 @@ ContentPart::Types ContentPartPrivate::types() const
199 return mTypes; 207 return mTypes;
200} 208}
201 209
202QVector<Content::Ptr> ContentPartPrivate::content() const 210QVector<Content::Ptr> ContentPartPrivate::content(ContentPart::Type ct) const
203{ 211{
204 return mContent; 212 return mContent[ct];
205} 213}
206 214
207QVector<Content::Ptr> ContentPart::content(ContentPart::Type ct) const 215QVector<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
261class ParserPrivate
262{
263public:
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;
270private:
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
279ParserPrivate::ParserPrivate(Parser* parser) 269ParserPrivate::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
350ContentPart::Ptr Parser::collectContentPart(const Part::Ptr &start) const 339ContentPart::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 };