File indexing completed on 2024-06-23 05:18:34
0001 /* 0002 SPDX-FileCopyrightText: 2022-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "mdnwarningwidgetjob.h" 0008 #include "messagecomposer_debug.h" 0009 #include <MessageComposer/MDNAdviceHelper> 0010 #include <MessageComposer/MessageFactoryNG> 0011 #include <MessageComposer/Util> 0012 #include <MessageViewer/MessageViewerSettings> 0013 using namespace MessageComposer; 0014 0015 MDNWarningWidgetJob::MDNWarningWidgetJob(QObject *parent) 0016 : QObject{parent} 0017 { 0018 } 0019 0020 MDNWarningWidgetJob::~MDNWarningWidgetJob() = default; 0021 0022 bool MDNWarningWidgetJob::canStart() const 0023 { 0024 return mItem.isValid(); 0025 } 0026 0027 bool MDNWarningWidgetJob::start() 0028 { 0029 QPair<QString, bool> mdnInfo; 0030 KMime::MDN::SendingMode s = KMime::MDN::SentAutomatically; // set to manual if asked user 0031 bool result = false; 0032 if (canStart()) { 0033 KMime::Message::Ptr msg = MessageComposer::Util::message(mItem); 0034 int mode = MessageViewer::MessageViewerSettings::self()->defaultPolicy(); 0035 if (!mode || (mode < 0) || (mode > 3)) { 0036 // Nothing 0037 } else { 0038 if (MessageComposer::MessageFactoryNG::MDNMDNUnknownOption(msg)) { 0039 mdnInfo = MessageComposer::MDNAdviceHelper::instance()->mdnMessageText("mdnUnknownOption"); 0040 s = KMime::MDN::SentManually; 0041 // TODO set type to Failed as well 0042 // and clear modifiers 0043 } 0044 0045 if (MessageComposer::MessageFactoryNG::MDNConfirmMultipleRecipients(msg)) { 0046 mdnInfo = MessageComposer::MDNAdviceHelper::instance()->mdnMessageText("mdnMultipleAddressesInReceiptTo"); 0047 s = KMime::MDN::SentManually; 0048 } 0049 0050 if (MessageComposer::MessageFactoryNG::MDNReturnPathEmpty(msg)) { 0051 mdnInfo = MessageComposer::MDNAdviceHelper::instance()->mdnMessageText("mdnReturnPathEmpty"); 0052 s = KMime::MDN::SentManually; 0053 } 0054 0055 if (MessageComposer::MessageFactoryNG::MDNReturnPathNotInRecieptTo(msg)) { 0056 mdnInfo = MessageComposer::MDNAdviceHelper::instance()->mdnMessageText("mdnReturnPathNotInReceiptTo"); 0057 s = KMime::MDN::SentManually; 0058 } 0059 0060 if (MessageComposer::MessageFactoryNG::MDNRequested(msg)) { 0061 if (s != KMime::MDN::SentManually) { 0062 // don't ask again if user has already been asked. use the users' decision 0063 mdnInfo = MessageComposer::MDNAdviceHelper::instance()->mdnMessageText("mdnNormalAsk"); 0064 } 0065 } else { // if message doesn't have a disposition header, never send anything. 0066 mode = 0; 0067 } 0068 } 0069 result = true; 0070 } else { 0071 qCWarning(MESSAGECOMPOSER_LOG) << "Impossible to start job"; 0072 } 0073 Q_EMIT showMdnInfo(mdnInfo, s); 0074 deleteLater(); 0075 return result; 0076 } 0077 0078 const Akonadi::Item &MDNWarningWidgetJob::item() const 0079 { 0080 return mItem; 0081 } 0082 0083 void MDNWarningWidgetJob::setItem(const Akonadi::Item &newItem) 0084 { 0085 mItem = newItem; 0086 } 0087 0088 #include "moc_mdnwarningwidgetjob.cpp"