7#include "mdnwarningjob.h"
8#include "kernel/mailkernel.h"
9#include "mailcommon_debug.h"
10#include "util/mailutil.h"
11#include <Akonadi/ItemModifyJob>
12#include <Akonadi/MDNStateAttribute>
13#include <MessageComposer/MessageSender>
14#include <MessageComposer/Util>
15#include <MessageViewer/MessageViewerSettings>
23MDNWarningJob::~MDNWarningJob()
27void MDNWarningJob::start()
30 qCWarning(MAILCOMMON_LOG) <<
" Impossible to start MDNWarningJob";
34 const Akonadi::Collection collection = mItem.parentCollection();
36 && (CommonKernel->folderIsSentMailFolder(collection) || CommonKernel->folderIsTrash(collection) || CommonKernel->folderIsDraftOrOutbox(collection)
37 || CommonKernel->folderIsTemplates(collection))) {
38 qCWarning(MAILCOMMON_LOG) <<
" It's not a valid collection";
45 qCWarning(MAILCOMMON_LOG) <<
" It's not a valid message";
50 const QPair<bool, KMime::MDN::SendingMode> mdnSend = modifyItem(message);
51 qCDebug(MAILCOMMON_LOG) <<
" Send " << mdnSend.first <<
" mdnSend.sendmode " << mdnSend.second;
54 const int quote = MessageViewer::MessageViewerSettings::self()->quoteMessage();
56 MessageComposer::MessageFactoryNG factory(message, Akonadi::Item().
id());
57 factory.setIdentityManager(mKernel->identityManager());
60 const KMime::Message::Ptr mdn = factory.createMDN(KMime::MDN::ManualAction, KMime::MDN::Displayed, mdnSend.second, quote);
62 if (!mKernel->msgSender()->send(mdn)) {
63 qCDebug(MAILCOMMON_LOG) <<
"Sending failed.";
71const Akonadi::Item &MDNWarningJob::item()
const
76void MDNWarningJob::setItem(
const Akonadi::Item &newItem)
81bool MDNWarningJob::canStart()
const
83 return mItem.
isValid() && (mResponse != Unknown);
86QPair<bool, KMime::MDN::SendingMode> MDNWarningJob::modifyItem(
const KMime::Message::Ptr &msg)
88 QPair<bool, KMime::MDN::SendingMode> result;
93 if (MessageComposer::Util::findTypeInMessage(msg.
data(),
"message",
"disposition-notification")) {
95 }
else if (mResponse == MDNIgnore) {
98 }
else if (mResponse == Denied) {
101 }
else if (mResponse == Send) {
103 mdnStateAttr->setMDNState(MessageComposer::MDNAdviceHelper::dispositionToSentState(KMime::MDN::Displayed));
105 result.first = doSend;
106 result.second = mSendingMode;
107 Akonadi::Item i(mItem.id());
108 i.setRevision(mItem.revision());
109 i.setMimeType(mItem.mimeType());
110 i.addAttribute(mdnStateAttr);
111 auto modify =
new Akonadi::ItemModifyJob(i);
112 modify->setIgnorePayload(
true);
113 modify->disableRevisionCheck();
117KMime::MDN::SendingMode MDNWarningJob::sendingMode()
const
122void MDNWarningJob::setSendingMode(KMime::MDN::SendingMode newSendingMode)
124 mSendingMode = newSendingMode;
127MDNWarningJob::ResponseMDN MDNWarningJob::response()
const
132void MDNWarningJob::setResponse(ResponseMDN newResponse)
134 mResponse = newResponse;
137#include "moc_mdnwarningjob.cpp"
QSharedPointer< Message > Ptr
Generic interface for mail kernels.
MAILCOMMON_EXPORT uint folderIdentity(const Akonadi::Item &item)
Returns the identity of the folder that contains the given Akonadi::Item.