diff options
author | Sandro Knauß <sknauss@kde.org> | 2016-01-12 16:55:57 +0100 |
---|---|---|
committer | Sandro Knauß <sknauss@kde.org> | 2016-01-12 16:55:57 +0100 |
commit | 06201e4d405cef119207b528f76f8f993c09e527 (patch) | |
tree | a8d5f9db850d8c977060b1f76e761c50eda7c047 /framework/mail/maillistmodel.cpp | |
parent | e9b4b2d564c46e1b75c46376e7d4f7fdac757e5e (diff) | |
download | kube-06201e4d405cef119207b528f76f8f993c09e527.tar.gz kube-06201e4d405cef119207b528f76f8f993c09e527.zip |
render mail to html
Diffstat (limited to 'framework/mail/maillistmodel.cpp')
-rw-r--r-- | framework/mail/maillistmodel.cpp | 46 |
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 | ||
5 | MailListModel::MailListModel(QObject *parent) | 11 | MailListModel::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 | } |