File indexing completed on 2024-06-23 05:18:37

0001 /*
0002  * This file is part of KMail.
0003  * SPDX-FileCopyrightText: 2009 Constantin Berzan <exit3219@gmail.com>
0004  *
0005  * SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 #pragma once
0008 
0009 #include "messagecomposer_export.h"
0010 #include "messagesender.h"
0011 
0012 #include <QObject>
0013 
0014 #include <KMime/KMimeMessage>
0015 
0016 class KJob;
0017 
0018 namespace MessageComposer
0019 {
0020 class AkonadiSenderPrivate;
0021 /**
0022  * @brief The AkonadiSender class
0023  */
0024 class MESSAGECOMPOSER_EXPORT AkonadiSender : public QObject, public MessageSender
0025 {
0026     Q_OBJECT
0027 
0028 public:
0029     explicit AkonadiSender(QObject *parent = nullptr);
0030     ~AkonadiSender() override;
0031 
0032 protected:
0033     /**
0034     Send given message. The message is either queued or sent
0035     immediately. The default behaviour, as selected with
0036     setSendImmediate(), can be overwritten with the parameter
0037     sendNow (by specifying true or false).
0038     The sender takes ownership of the given message on success,
0039     so DO NOT DELETE OR MODIFY the message further.
0040     Returns true on success.
0041 
0042     TODO cberzan: update docu...
0043     */
0044     [[nodiscard]] bool doSend(const KMime::Message::Ptr &msg, short sendNow) override;
0045 
0046     /**
0047     Send queued messages, using the specified transport or the
0048     default, if none is given.
0049     */
0050     [[nodiscard]] bool doSendQueued(int transportId = -1) override;
0051 
0052 private:
0053     /**
0054     Queue or send immediately one message using MailTransport::MessageQueueJob.
0055     */
0056     MESSAGECOMPOSER_NO_EXPORT void sendOrQueueMessage(const KMime::Message::Ptr &msg,
0057                                                       MessageComposer::MessageSender::SendMethod method = MessageComposer::MessageSender::SendDefault);
0058 
0059     MESSAGECOMPOSER_NO_EXPORT void queueJobResult(KJob *job);
0060     std::unique_ptr<AkonadiSenderPrivate> const d;
0061 };
0062 }