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"