summaryrefslogtreecommitdiffstats
path: root/framework/src
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-08-10 21:36:17 -0600
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-08-10 21:38:37 -0600
commite07a23c486f67cc2014af3fd8a639a13dd100162 (patch)
treec2e5e739b590ece4941672f3a55508ef06d6d1ac /framework/src
parente354603dcb42c54ab11c0c393d5a1607ed6343d7 (diff)
downloadkube-e07a23c486f67cc2014af3fd8a639a13dd100162.tar.gz
kube-e07a23c486f67cc2014af3fd8a639a13dd100162.zip
splitAddress does not work if the name has a comma in it
With i.e. "Mollekopf, Christian <mollekopf@example.org>", we'l end up with an address "Mollekopf" and one "Christian <mollekopf@example.org>".
Diffstat (limited to 'framework/src')
-rw-r--r--framework/src/domain/composercontroller.cpp28
-rw-r--r--framework/src/domain/mime/mailtemplates.cpp45
-rw-r--r--framework/src/domain/mime/tests/mailtemplatetest.cpp3
3 files changed, 35 insertions, 41 deletions
diff --git a/framework/src/domain/composercontroller.cpp b/framework/src/domain/composercontroller.cpp
index 311c79f3..e4bd6ae2 100644
--- a/framework/src/domain/composercontroller.cpp
+++ b/framework/src/domain/composercontroller.cpp
@@ -22,7 +22,6 @@
22#include "composercontroller.h" 22#include "composercontroller.h"
23#include <settings/settings.h> 23#include <settings/settings.h>
24#include <KMime/Message> 24#include <KMime/Message>
25#include <KCodecs/KEmailAddress>
26#include <QVariant> 25#include <QVariant>
27#include <QSortFilterProxyModel> 26#include <QSortFilterProxyModel>
28#include <QList> 27#include <QList>
@@ -250,24 +249,25 @@ Selector *ComposerController::identitySelector() const
250 return mIdentitySelector.data(); 249 return mIdentitySelector.data();
251} 250}
252 251
253static void applyAddresses(const QStringList &list, std::function<void(const QByteArray &, const QByteArray &)> callback) 252static void applyAddresses(const KMime::Types::Mailbox::List &list, std::function<void(const QByteArray &, const QByteArray &)> callback)
254{ 253{
255 for (const auto &to : list) { 254 for (const auto &to : list) {
256 QByteArray displayName; 255 callback(to.address(), to.name().toUtf8());
257 QByteArray addrSpec;
258 QByteArray comment;
259 KEmailAddress::splitAddress(to.toUtf8(), displayName, addrSpec, comment);
260 callback(addrSpec, displayName);
261 } 256 }
262} 257}
263 258
264static void applyAddresses(const QString &list, std::function<void(const QByteArray &, const QByteArray &)> callback) 259static void applyAddresses(const QStringList &list, std::function<void(const QByteArray &, const QByteArray &)> callback)
265{ 260{
266 applyAddresses(KEmailAddress::splitAddressList(list), callback); 261 KMime::Types::Mailbox::List mailboxes;
262 for (const auto &s : list) {
263 KMime::Types::Mailbox mb;
264 mb.fromUnicodeString(s);
265 mailboxes << mb;
266 }
267 applyAddresses(mailboxes, callback);
267} 268}
268 269
269 270static QStringList getStringListFromAddresses(const KMime::Types::Mailbox::List &s)
270static QStringList getStringListFromAddresses(const QString &s)
271{ 271{
272 QStringList list; 272 QStringList list;
273 applyAddresses(s, [&](const QByteArray &addrSpec, const QByteArray &displayName) { 273 applyAddresses(s, [&](const QByteArray &addrSpec, const QByteArray &displayName) {
@@ -332,9 +332,9 @@ void ComposerController::addAttachmentPart(KMime::Content *partToAttach)
332 332
333void ComposerController::setMessage(const KMime::Message::Ptr &msg) 333void ComposerController::setMessage(const KMime::Message::Ptr &msg)
334{ 334{
335 mToModel->setStringList(getStringListFromAddresses(msg->to(true)->asUnicodeString())); 335 mToModel->setStringList(getStringListFromAddresses(msg->to(true)->mailboxes()));
336 mCcModel->setStringList(getStringListFromAddresses(msg->cc(true)->asUnicodeString())); 336 mCcModel->setStringList(getStringListFromAddresses(msg->cc(true)->mailboxes()));
337 mBccModel->setStringList(getStringListFromAddresses(msg->bcc(true)->asUnicodeString())); 337 mBccModel->setStringList(getStringListFromAddresses(msg->bcc(true)->mailboxes()));
338 338
339 setSubject(msg->subject(true)->asUnicodeString()); 339 setSubject(msg->subject(true)->asUnicodeString());
340 setBody(MailTemplates::plaintextContent(msg)); 340 setBody(MailTemplates::plaintextContent(msg));
diff --git a/framework/src/domain/mime/mailtemplates.cpp b/framework/src/domain/mime/mailtemplates.cpp
index bafe12d4..7bfcf38e 100644
--- a/framework/src/domain/mime/mailtemplates.cpp
+++ b/framework/src/domain/mime/mailtemplates.cpp
@@ -36,7 +36,6 @@
36 36
37#include <KCodecs/KCharsets> 37#include <KCodecs/KCharsets>
38#include <KMime/Types> 38#include <KMime/Types>
39#include <KCodecs/KEmailAddress>
40 39
41#include <mimetreeparser/objecttreeparser.h> 40#include <mimetreeparser/objecttreeparser.h>
42 41
@@ -851,12 +850,12 @@ void MailTemplates::reply(const KMime::Message::Ptr &origMsg, const std::functio
851 const auto htmlContent = otp.htmlContent(); 850 const auto htmlContent = otp.htmlContent();
852 851
853 plainMessageText(plainTextContent, htmlContent, stripSignature, [=] (const QString &body) { 852 plainMessageText(plainTextContent, htmlContent, stripSignature, [=] (const QString &body) {
854 //Quoted body */ 853 //Quoted body
855 QString plainQuote = quotedPlainText(body, origMsg->from()->displayString()); 854 QString plainQuote = quotedPlainText(body, origMsg->from()->displayString());
856 if (plainQuote.endsWith(QLatin1Char('\n'))) { 855 if (plainQuote.endsWith(QLatin1Char('\n'))) {
857 plainQuote.chop(1); 856 plainQuote.chop(1);
858 } 857 }
859 //The plain body is complete */ 858 //The plain body is complete
860 auto plainBodyResult = plainBody + plainQuote; 859 auto plainBodyResult = plainBody + plainQuote;
861 htmlMessageText(plainTextContent, htmlContent, stripSignature, [=] (const QString &body, const QString &headElement) { 860 htmlMessageText(plainTextContent, htmlContent, stripSignature, [=] (const QString &body, const QString &headElement) {
862 //The html body is complete 861 //The html body is complete
@@ -916,22 +915,17 @@ static KMime::Content *createBodyPart(const QByteArray &body) {
916 return mainMessage; 915 return mainMessage;
917} 916}
918 917
919static void applyAddresses(const QStringList &list, std::function<void(const QByteArray &, const QByteArray &)> callback) 918static KMime::Types::Mailbox::List stringListToMailboxes(const QStringList &list)
920{ 919{
921 for (const auto &to : list) { 920 KMime::Types::Mailbox::List mailboxes;
922 QByteArray displayName; 921 for (const auto &s : list) {
923 QByteArray addrSpec; 922 KMime::Types::Mailbox mb;
924 QByteArray comment; 923 mb.fromUnicodeString(s);
925 KEmailAddress::splitAddress(to.toUtf8(), displayName, addrSpec, comment); 924 mailboxes << mb;
926 callback(addrSpec, displayName);
927 } 925 }
926 return mailboxes;
928} 927}
929 928
930// static void applyAddresses(const QString &list, std::function<void(const QByteArray &, const QByteArray &)> callback)
931// {
932// applyAddresses(KEmailAddress::splitAddressList(list), callback);
933// }
934
935KMime::Message::Ptr MailTemplates::createMessage(KMime::Message::Ptr existingMessage, const QStringList &to, const QStringList &cc, const QStringList &bcc, const KMime::Types::Mailbox &from, const QString &subject, const QString &body, const QList<Attachment> &attachments, const std::vector<GpgME::Key> &signingKeys) 929KMime::Message::Ptr MailTemplates::createMessage(KMime::Message::Ptr existingMessage, const QStringList &to, const QStringList &cc, const QStringList &bcc, const KMime::Types::Mailbox &from, const QString &subject, const QString &body, const QList<Attachment> &attachments, const std::vector<GpgME::Key> &signingKeys)
936{ 930{
937 auto mail = existingMessage; 931 auto mail = existingMessage;
@@ -940,20 +934,19 @@ KMime::Message::Ptr MailTemplates::createMessage(KMime::Message::Ptr existingMes
940 } 934 }
941 935
942 mail->to(true)->clear(); 936 mail->to(true)->clear();
943 applyAddresses(to, [&](const QByteArray &addrSpec, const QByteArray &displayName) { 937 for (const auto &mb : stringListToMailboxes(to)) {
944 mail->to(true)->addAddress(addrSpec, displayName); 938 mail->to()->addAddress(mb);
945 }); 939 }
946
947 mail->cc(true)->clear(); 940 mail->cc(true)->clear();
948 applyAddresses(cc, [&](const QByteArray &addrSpec, const QByteArray &displayName) { 941 for (const auto &mb : stringListToMailboxes(cc)) {
949 mail->cc(true)->addAddress(addrSpec, displayName); 942 mail->cc()->addAddress(mb);
950 }); 943 }
951
952 mail->bcc(true)->clear(); 944 mail->bcc(true)->clear();
953 applyAddresses(bcc, [&](const QByteArray &addrSpec, const QByteArray &displayName) { 945 for (const auto &mb : stringListToMailboxes(bcc)) {
954 mail->bcc(true)->addAddress(addrSpec, displayName); 946 mail->bcc()->addAddress(mb);
955 }); 947 }
956 948
949 mail->from(true)->clear();
957 mail->from(true)->addAddress(from); 950 mail->from(true)->addAddress(from);
958 951
959 mail->subject(true)->fromUnicodeString(subject, "utf-8"); 952 mail->subject(true)->fromUnicodeString(subject, "utf-8");
diff --git a/framework/src/domain/mime/tests/mailtemplatetest.cpp b/framework/src/domain/mime/tests/mailtemplatetest.cpp
index 0e8eb2c3..92dfba65 100644
--- a/framework/src/domain/mime/tests/mailtemplatetest.cpp
+++ b/framework/src/domain/mime/tests/mailtemplatetest.cpp
@@ -112,6 +112,7 @@ private slots:
112 }); 112 });
113 QTRY_VERIFY(result); 113 QTRY_VERIFY(result);
114 QCOMPARE(normalize(removeFirstLine(result->body())), normalize(msg->body())); 114 QCOMPARE(normalize(removeFirstLine(result->body())), normalize(msg->body()));
115 QCOMPARE(result->to()->addresses(), {{"konqi@example.org"}});
115 } 116 }
116 117
117 void testHtmlReply() 118 void testHtmlReply()
@@ -167,7 +168,7 @@ private slots:
167 void testCreatePlainMail() 168 void testCreatePlainMail()
168 { 169 {
169 QStringList to = {{"to@example.org"}}; 170 QStringList to = {{"to@example.org"}};
170 QStringList cc = {{"cc@example.org"}};; 171 QStringList cc = {{"cc@example.org"}};
171 QStringList bcc = {{"bcc@example.org"}};; 172 QStringList bcc = {{"bcc@example.org"}};;
172 KMime::Types::Mailbox from; 173 KMime::Types::Mailbox from;
173 from.fromUnicodeString("from@example.org"); 174 from.fromUnicodeString("from@example.org");