1 /*
2 SPDX-FileCopyrightText: 2017-2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7 #include "createreplymessagejob.h"
8
9 #include "../util.h"
10 #include "composer.h"
11 #include "editor/kmcomposerwin.h"
12 #include "kmkernel.h"
13 #include <KEmailAddress>
14 #include <MailCommon/MailUtil>
15
CreateReplyMessageJob(QObject * parent)16 CreateReplyMessageJob::CreateReplyMessageJob(QObject *parent)
17 : QObject(parent)
18 {
19 }
20
~CreateReplyMessageJob()21 CreateReplyMessageJob::~CreateReplyMessageJob()
22 {
23 delete mMessageFactory;
24 }
25
setSettings(const CreateReplyMessageJobSettings & settings)26 void CreateReplyMessageJob::setSettings(const CreateReplyMessageJobSettings &settings)
27 {
28 mSettings = settings;
29 }
30
31 /// Small helper function to get the composer context from a reply
replyContext(const MessageComposer::MessageFactoryNG::MessageReply & reply)32 inline KMail::Composer::TemplateContext replyContext(const MessageComposer::MessageFactoryNG::MessageReply &reply)
33 {
34 if (reply.replyAll) {
35 return KMail::Composer::ReplyToAll;
36 } else {
37 return KMail::Composer::Reply;
38 }
39 }
40
start()41 void CreateReplyMessageJob::start()
42 {
43 const auto col = CommonKernel->collectionFromId(mSettings.item.parentCollection().id());
44 mMessageFactory = new MessageComposer::MessageFactoryNG(mSettings.msg, mSettings.item.id(), col);
45 mMessageFactory->setIdentityManager(KMKernel::self()->identityManager());
46 mMessageFactory->setFolderIdentity(MailCommon::Util::folderIdentity(mSettings.item));
47 mMessageFactory->setMailingListAddresses(KMail::Util::mailingListsFromMessage(mSettings.item));
48 mMessageFactory->putRepliesInSameFolder(KMail::Util::putRepliesInSameFolder(mSettings.item));
49 mMessageFactory->setSelection(mSettings.selection);
50 mMessageFactory->setTemplate(mSettings.templateStr);
51 mMessageFactory->setReplyAsHtml(mSettings.replyAsHtml);
52 if (mSettings.noQuote) {
53 mMessageFactory->setQuote(false);
54 }
55 connect(mMessageFactory, &MessageComposer::MessageFactoryNG::createReplyDone, this, &CreateReplyMessageJob::slotCreateReplyDone);
56 mMessageFactory->setReplyStrategy(mSettings.replyStrategy);
57 mMessageFactory->createReplyAsync();
58 }
59
slotCreateReplyDone(const MessageComposer::MessageFactoryNG::MessageReply & reply)60 void CreateReplyMessageJob::slotCreateReplyDone(const MessageComposer::MessageFactoryNG::MessageReply &reply)
61 {
62 KMime::Message::Ptr rmsg = reply.msg;
63 if (mSettings.url.isValid()) {
64 rmsg->to()->fromUnicodeString(KEmailAddress::decodeMailtoUrl(mSettings.url), "utf-8");
65 }
66 bool lastEncrypt = false;
67 bool lastSign = false;
68 KMail::Util::lastEncryptAndSignState(lastEncrypt, lastSign, mSettings.msg);
69
70 KMail::Composer *win = KMail::makeComposer(rmsg,
71 lastSign,
72 lastEncrypt,
73 (mSettings.replyStrategy == MessageComposer::ReplyNone) ? KMail::Composer::Reply : replyContext(reply),
74 0,
75 mSettings.selection,
76 mSettings.templateStr);
77 win->setFocusToEditor();
78 win->show();
79 deleteLater();
80 }
81