diff options
-rw-r--r-- | framework/src/domain/composercontroller.cpp | 20 | ||||
-rw-r--r-- | framework/src/domain/mime/mailtemplates.cpp | 6 | ||||
-rw-r--r-- | framework/src/domain/mime/mailtemplates.h | 2 | ||||
-rw-r--r-- | framework/src/domain/mime/tests/mailtemplatetest.cpp | 21 |
4 files changed, 42 insertions, 7 deletions
diff --git a/framework/src/domain/composercontroller.cpp b/framework/src/domain/composercontroller.cpp index e4bd6ae2..b6380f50 100644 --- a/framework/src/domain/composercontroller.cpp +++ b/framework/src/domain/composercontroller.cpp | |||
@@ -62,6 +62,15 @@ public: | |||
62 | } | 62 | } |
63 | 63 | ||
64 | } | 64 | } |
65 | |||
66 | QVector<QByteArray> getAllAddresses() | ||
67 | { | ||
68 | QVector<QByteArray> list; | ||
69 | for (int i = 0; i < model()->rowCount(); i++) { | ||
70 | list << model()->data(model()->index(i, 0), IdentitiesModel::Address).toString().toUtf8(); | ||
71 | } | ||
72 | return list; | ||
73 | } | ||
65 | private: | 74 | private: |
66 | ComposerController &mController; | 75 | ComposerController &mController; |
67 | }; | 76 | }; |
@@ -365,10 +374,19 @@ void ComposerController::loadMessage(const QVariant &message, bool loadAsDraft) | |||
365 | if (loadAsDraft) { | 374 | if (loadAsDraft) { |
366 | setMessage(mail); | 375 | setMessage(mail); |
367 | } else { | 376 | } else { |
377 | //Find all personal email addresses to exclude from reply | ||
378 | KMime::Types::AddrSpecList me; | ||
379 | auto list = static_cast<IdentitySelector*>(mIdentitySelector.data())->getAllAddresses(); | ||
380 | for (const auto &a : list) { | ||
381 | KMime::Types::Mailbox mb; | ||
382 | mb.setAddress(a); | ||
383 | me << mb.addrSpec(); | ||
384 | } | ||
385 | |||
368 | MailTemplates::reply(mail, [this] (const KMime::Message::Ptr &reply) { | 386 | MailTemplates::reply(mail, [this] (const KMime::Message::Ptr &reply) { |
369 | //We assume reply | 387 | //We assume reply |
370 | setMessage(reply); | 388 | setMessage(reply); |
371 | }); | 389 | }, me); |
372 | } | 390 | } |
373 | } else { | 391 | } else { |
374 | qWarning() << "Retrieved empty message"; | 392 | qWarning() << "Retrieved empty message"; |
diff --git a/framework/src/domain/mime/mailtemplates.cpp b/framework/src/domain/mime/mailtemplates.cpp index 7bfcf38e..79275bda 100644 --- a/framework/src/domain/mime/mailtemplates.cpp +++ b/framework/src/domain/mime/mailtemplates.cpp | |||
@@ -795,16 +795,12 @@ static Recipients getRecipients(const KMime::Message::Ptr &origMsg, const KMime: | |||
795 | return {toList, ccList}; | 795 | return {toList, ccList}; |
796 | } | 796 | } |
797 | 797 | ||
798 | void MailTemplates::reply(const KMime::Message::Ptr &origMsg, const std::function<void(const KMime::Message::Ptr &result)> &callback) | 798 | void MailTemplates::reply(const KMime::Message::Ptr &origMsg, const std::function<void(const KMime::Message::Ptr &result)> &callback, const KMime::Types::AddrSpecList &me) |
799 | { | 799 | { |
800 | //FIXME | 800 | //FIXME |
801 | const bool alwaysPlain = true; | 801 | const bool alwaysPlain = true; |
802 | KMime::Message::Ptr msg(new KMime::Message); | 802 | KMime::Message::Ptr msg(new KMime::Message); |
803 | //FIXME | ||
804 | //Personal email addresses, required to detect the case where we reply to a message we have sent ourselves | ||
805 | KMime::Types::AddrSpecList me; | ||
806 | 803 | ||
807 | // const uint originalIdentity = identityUoid(origMsg); | ||
808 | initHeader(msg); | 804 | initHeader(msg); |
809 | 805 | ||
810 | msg->contentType()->setCharset("utf-8"); | 806 | msg->contentType()->setCharset("utf-8"); |
diff --git a/framework/src/domain/mime/mailtemplates.h b/framework/src/domain/mime/mailtemplates.h index a8a4b606..edcc982a 100644 --- a/framework/src/domain/mime/mailtemplates.h +++ b/framework/src/domain/mime/mailtemplates.h | |||
@@ -34,7 +34,7 @@ struct Attachment { | |||
34 | 34 | ||
35 | namespace MailTemplates | 35 | namespace MailTemplates |
36 | { | 36 | { |
37 | void reply(const KMime::Message::Ptr &origMsg, const std::function<void(const KMime::Message::Ptr &result)> &callback); | 37 | void reply(const KMime::Message::Ptr &origMsg, const std::function<void(const KMime::Message::Ptr &result)> &callback, const KMime::Types::AddrSpecList &me = {}); |
38 | QString plaintextContent(const KMime::Message::Ptr &origMsg); | 38 | QString plaintextContent(const KMime::Message::Ptr &origMsg); |
39 | KMime::Message::Ptr 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 = {}); | 39 | KMime::Message::Ptr 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 = {}); |
40 | }; | 40 | }; |
diff --git a/framework/src/domain/mime/tests/mailtemplatetest.cpp b/framework/src/domain/mime/tests/mailtemplatetest.cpp index 51c5e243..098c34bc 100644 --- a/framework/src/domain/mime/tests/mailtemplatetest.cpp +++ b/framework/src/domain/mime/tests/mailtemplatetest.cpp | |||
@@ -181,6 +181,27 @@ private slots: | |||
181 | QCOMPARE(result->cc()->addresses(), l); | 181 | QCOMPARE(result->cc()->addresses(), l); |
182 | } | 182 | } |
183 | 183 | ||
184 | void testMultiRecipientReplyFilteringMe() | ||
185 | { | ||
186 | KMime::Types::AddrSpecList me; | ||
187 | KMime::Types::Mailbox mb; | ||
188 | mb.setAddress("release-team@kde.org"); | ||
189 | me << mb.addrSpec(); | ||
190 | |||
191 | auto msg = readMail("multirecipients.mbox"); | ||
192 | KMime::Message::Ptr result; | ||
193 | MailTemplates::reply(msg, [&] (const KMime::Message::Ptr &r) { | ||
194 | result = r; | ||
195 | }, me); | ||
196 | QTRY_VERIFY(result); | ||
197 | auto content = removeFirstLine(result->body()); | ||
198 | QVERIFY(!content.isEmpty()); | ||
199 | QCOMPARE(unquote(content), QLatin1String("test")); | ||
200 | QCOMPARE(result->to()->addresses(), {{"konqi@example.org"}}); | ||
201 | auto l = QVector<QByteArray>{{"kde-devel@kde.org"}}; | ||
202 | QCOMPARE(result->cc()->addresses(), l); | ||
203 | } | ||
204 | |||
184 | void testCreatePlainMail() | 205 | void testCreatePlainMail() |
185 | { | 206 | { |
186 | QStringList to = {{"to@example.org"}}; | 207 | QStringList to = {{"to@example.org"}}; |