File indexing completed on 2025-02-16 04:50:19

0001 /*
0002     SPDX-FileCopyrightText: 2014 Christian Mollekopf <mollekopf@kolabsys.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <KIMAP/ImapSet>
0010 #include <KIMAP/Session>
0011 #include <KJob>
0012 #include <KMime/Message>
0013 
0014 /**
0015  * This job appends a message, marks the old one as deleted, and returns the uid of the appended message.
0016  */
0017 class ReplaceMessageJob : public KJob
0018 {
0019     Q_OBJECT
0020 public:
0021     ReplaceMessageJob(const KMime::Message::Ptr &msg,
0022                       KIMAP::Session *session,
0023                       const QString &mailbox,
0024                       qint64 uidNext = -1,
0025                       const KIMAP::ImapSet &oldUids = KIMAP::ImapSet(),
0026                       QObject *parent = nullptr);
0027 
0028     qint64 newUid() const;
0029 
0030     void start() override;
0031 
0032 private:
0033     void triggerSearchJob();
0034     void triggerDeleteJobIfNecessary();
0035 
0036 private Q_SLOTS:
0037     void onAppendMessageDone(KJob *job);
0038     void onSelectDone(KJob *job);
0039     void onSearchDone(KJob *job);
0040     void onDeleteDone(KJob *job);
0041 
0042 private:
0043     KIMAP::Session *mSession = nullptr;
0044     const KMime::Message::Ptr mMessage;
0045     const QString mMailbox;
0046     qint64 mUidNext;
0047     KIMAP::ImapSet mOldUids;
0048     qint64 mNewUid = -1;
0049     const QByteArray mMessageId;
0050 };