summaryrefslogtreecommitdiffstats
path: root/framework/mail/maillistmodel.cpp
diff options
context:
space:
mode:
authorSandro Knauß <sknauss@kde.org>2016-01-12 16:55:57 +0100
committerSandro Knauß <sknauss@kde.org>2016-01-12 16:55:57 +0100
commit06201e4d405cef119207b528f76f8f993c09e527 (patch)
treea8d5f9db850d8c977060b1f76e761c50eda7c047 /framework/mail/maillistmodel.cpp
parente9b4b2d564c46e1b75c46376e7d4f7fdac757e5e (diff)
downloadkube-06201e4d405cef119207b528f76f8f993c09e527.tar.gz
kube-06201e4d405cef119207b528f76f8f993c09e527.zip
render mail to html
Diffstat (limited to 'framework/mail/maillistmodel.cpp')
-rw-r--r--framework/mail/maillistmodel.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/framework/mail/maillistmodel.cpp b/framework/mail/maillistmodel.cpp
index e6a9c218..c37e2be4 100644
--- a/framework/mail/maillistmodel.cpp
+++ b/framework/mail/maillistmodel.cpp
@@ -1,6 +1,12 @@
1#include "maillistmodel.h" 1#include "maillistmodel.h"
2 2
3#include "filehtmlwriter.h"
4#include "objecttreesource.h"
5
3#include <QFile> 6#include <QFile>
7#include <QImage>
8#include <KF5/MessageViewer/ObjectTreeParser>
9#include <KF5/MessageViewer/CSSHelper>
4 10
5MailListModel::MailListModel(QObject *parent) 11MailListModel::MailListModel(QObject *parent)
6 : QIdentityProxyModel() 12 : QIdentityProxyModel()
@@ -25,6 +31,7 @@ QHash< int, QByteArray > MailListModel::roleNames() const
25 roles[Important] = "important"; 31 roles[Important] = "important";
26 roles[Id] = "id"; 32 roles[Id] = "id";
27 roles[MimeMessage] = "mimeMessage"; 33 roles[MimeMessage] = "mimeMessage";
34 roles[RenderedMessage] = "renderedMessage";
28 roles[DomainObject] = "domainObject"; 35 roles[DomainObject] = "domainObject";
29 36
30 return roles; 37 return roles;
@@ -61,6 +68,45 @@ QVariant MailListModel::data(const QModelIndex &idx, int role) const
61 } 68 }
62 return "Failed to read mail."; 69 return "Failed to read mail.";
63 } 70 }
71 case RenderedMessage: {
72 auto filename = srcIdx.sibling(srcIdx.row(), 6).data(Qt::DisplayRole).toString();
73 QFile file(filename);
74 if (file.open(QFile::ReadOnly)) {
75 const auto mailData = KMime::CRLFtoLF(file.readAll());
76 KMime::Message::Ptr msg(new KMime::Message);
77 msg->setContent(mailData);
78 msg->parse();
79
80 // render the mail
81 const QString fname("/tmp/test.html");
82 FileHtmlWriter htmlWriter(fname);
83 QImage paintDevice;
84 MessageViewer::CSSHelper cssHelper(&paintDevice);
85 MessageViewer::NodeHelper nodeHelper;
86 ObjectTreeSource source(&htmlWriter, &cssHelper);
87 MessageViewer::ObjectTreeParser otp(&source, &nodeHelper);
88
89 htmlWriter.begin(QString());
90 htmlWriter.queue(cssHelper.htmlHead(false));
91
92 otp.parseObjectTree(msg.data());
93
94 htmlWriter.queue(QStringLiteral("</body></html>"));
95 htmlWriter.flush();
96 htmlWriter.end();
97
98 QFile file(fname);
99 if (file.open(QFile::ReadOnly)) {
100 const auto content = file.readAll();
101 return content;
102 } else {
103 qWarning() << "Failed to open the file";
104 }
105 } else {
106 qWarning() << "Failed to open the file";
107 }
108 return "Failed to read mail.";
109 }
64 } 110 }
65 return QIdentityProxyModel::data(idx, role); 111 return QIdentityProxyModel::data(idx, role);
66} 112}