File indexing completed on 2024-06-09 05:18:08

0001 /* -*- mode: C++ -*-
0002  * SPDX-FileCopyrightText: 2004 David Faure <faure@kde.org>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #pragma once
0008 
0009 #include "jobscheduler.h"
0010 
0011 #include <Akonadi/Collection>
0012 #include <Akonadi/Item>
0013 
0014 class KJob;
0015 
0016 namespace MailCommon
0017 {
0018 class ExpireJob : public ScheduledJob
0019 {
0020     Q_OBJECT
0021 public:
0022     explicit ExpireJob(const Akonadi::Collection &folder, bool immediate);
0023     ~ExpireJob() override;
0024 
0025     void execute() override;
0026     void kill() override;
0027 
0028 private:
0029     void slotDoWork();
0030     void slotExpireDone(KJob *job);
0031     void slotMoveDone(KJob *job);
0032     void itemFetchResult(KJob *job);
0033     void done();
0034     void slotExpireDeleteDone();
0035 
0036 private:
0037     Akonadi::Item::List mRemovedMsgs;
0038     qint64 mMaxUnreadTime = 0;
0039     qint64 mMaxReadTime = 0;
0040     bool mExpireMessagesWithoutInvalidDate = false;
0041     Akonadi::Collection mMoveToFolder;
0042 };
0043 
0044 /// A scheduled "expire mails in this folder" task.
0045 class ScheduledExpireTask : public ScheduledTask
0046 {
0047 public:
0048     /// If immediate is set, the job will execute synchronously. This is used when
0049     /// the user requests explicitly that the operation should happen immediately.
0050     ScheduledExpireTask(const Akonadi::Collection &folder, bool immediate)
0051         : ScheduledTask(folder, immediate)
0052     {
0053     }
0054 
0055     ~ScheduledExpireTask() override = default;
0056 
0057     ScheduledJob *run() override
0058     {
0059         return folder().isValid() ? new ExpireJob(folder(), isImmediate()) : nullptr;
0060     }
0061 
0062     int taskTypeId() const override
0063     {
0064         return 1;
0065     }
0066 };
0067 } // namespace