summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-06-23 11:26:48 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-06-23 11:26:48 +0200
commitc605c01fb480e634c9edc21e8430e753e4595be8 (patch)
tree76d59c977e413041c37ab9fbf4913dcc13dbe4b2
parent95865281eb7b83cf4c275a817971d88e2c7daff9 (diff)
downloadkube-c605c01fb480e634c9edc21e8430e753e4595be8.tar.gz
kube-c605c01fb480e634c9edc21e8430e753e4595be8.zip
Refactored the reply generating code for comprehensibility
-rw-r--r--framework/src/domain/mime/mailtemplates.cpp61
1 files changed, 39 insertions, 22 deletions
diff --git a/framework/src/domain/mime/mailtemplates.cpp b/framework/src/domain/mime/mailtemplates.cpp
index b1e57742..6158f787 100644
--- a/framework/src/domain/mime/mailtemplates.cpp
+++ b/framework/src/domain/mime/mailtemplates.cpp
@@ -562,26 +562,9 @@ enum ReplyStrategy {
562 ReplyNone 562 ReplyNone
563}; 563};
564 564
565void MailTemplates::reply(const KMime::Message::Ptr &origMsg, const std::function<void(const KMime::Message::Ptr &result)> &callback) 565static KMime::Types::Mailbox::List getMailingListAddresses(const KMime::Message::Ptr &origMsg)
566{ 566{
567 //FIXME
568 const bool alwaysPlain = true;
569 //FIXME
570 const ReplyStrategy replyStrategy = ReplySmart;
571 KMime::Message::Ptr msg(new KMime::Message);
572 //FIXME
573 //Personal email addresses
574 KMime::Types::AddrSpecList me;
575 KMime::Types::Mailbox::List toList;
576 KMime::Types::Mailbox::List replyToList;
577 KMime::Types::Mailbox::List mailingListAddresses; 567 KMime::Types::Mailbox::List mailingListAddresses;
578
579 // const uint originalIdentity = identityUoid(origMsg);
580 initHeader(msg);
581 replyToList = origMsg->replyTo()->mailboxes();
582
583 msg->contentType()->setCharset("utf-8");
584
585 if (origMsg->headerByType("List-Post") && 568 if (origMsg->headerByType("List-Post") &&
586 origMsg->headerByType("List-Post")->asUnicodeString().contains(QStringLiteral("mailto:"), Qt::CaseInsensitive)) { 569 origMsg->headerByType("List-Post")->asUnicodeString().contains(QStringLiteral("mailto:"), Qt::CaseInsensitive)) {
587 570
@@ -593,7 +576,23 @@ void MailTemplates::reply(const KMime::Message::Ptr &origMsg, const std::functio
593 mailingListAddresses << mailbox; 576 mailingListAddresses << mailbox;
594 } 577 }
595 } 578 }
579 return mailingListAddresses;
580}
581
582struct Recipients {
583 KMime::Types::Mailbox::List to;
584 KMime::Types::Mailbox::List cc;
585};
586
587static Recipients getRecipients(const KMime::Message::Ptr &origMsg, const KMime::Types::AddrSpecList &me)
588{
589 const KMime::Types::Mailbox::List replyToList = origMsg->replyTo()->mailboxes();
590 const KMime::Types::Mailbox::List mailingListAddresses = getMailingListAddresses(origMsg);
596 591
592 KMime::Types::Mailbox::List toList;
593 KMime::Types::Mailbox::List ccList;
594 //FIXME
595 const ReplyStrategy replyStrategy = ReplySmart;
597 switch (replyStrategy) { 596 switch (replyStrategy) {
598 case ReplySmart: { 597 case ReplySmart: {
599 if (auto hdr = origMsg->headerByType("Mail-Followup-To")) { 598 if (auto hdr = origMsg->headerByType("Mail-Followup-To")) {
@@ -722,9 +721,7 @@ void MailTemplates::reply(const KMime::Message::Ptr &origMsg, const std::functio
722 ccRecipients.pop_front(); 721 ccRecipients.pop_front();
723 } 722 }
724 723
725 foreach (const KMime::Types::Mailbox &mailbox, ccRecipients) { 724 ccList = ccRecipients;
726 msg->cc()->addAddress(mailbox);
727 }
728 } 725 }
729 726
730 if (toList.isEmpty() && !recipients.isEmpty()) { 727 if (toList.isEmpty() && !recipients.isEmpty()) {
@@ -763,10 +760,30 @@ void MailTemplates::reply(const KMime::Message::Ptr &origMsg, const std::functio
763 // the addressees will be set by the caller 760 // the addressees will be set by the caller
764 break; 761 break;
765 } 762 }
763 return {toList, ccList};
764}
766 765
767 foreach (const KMime::Types::Mailbox &mailbox, toList) { 766void MailTemplates::reply(const KMime::Message::Ptr &origMsg, const std::function<void(const KMime::Message::Ptr &result)> &callback)
767{
768 //FIXME
769 const bool alwaysPlain = true;
770 KMime::Message::Ptr msg(new KMime::Message);
771 //FIXME
772 //Personal email addresses, required to detect the case where we reply to a message we have sent ourselves
773 KMime::Types::AddrSpecList me;
774
775 // const uint originalIdentity = identityUoid(origMsg);
776 initHeader(msg);
777
778 msg->contentType()->setCharset("utf-8");
779
780 const auto recipients = getRecipients(origMsg, me);
781 for (const auto &mailbox : recipients.to) {
768 msg->to()->addAddress(mailbox); 782 msg->to()->addAddress(mailbox);
769 } 783 }
784 for (const auto &mailbox : recipients.cc) {
785 msg->cc(true)->addAddress(mailbox);
786 }
770 787
771 const QByteArray refStr = getRefStr(origMsg); 788 const QByteArray refStr = getRefStr(origMsg);
772 if (!refStr.isEmpty()) { 789 if (!refStr.isEmpty()) {