File indexing completed on 2024-06-09 05:17:54

0001 /*
0002   SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org>
0003 
0004   SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 #include "mailcommon_export.h"
0009 
0010 #include <MailCommon/ExpireCollectionAttribute>
0011 #include <QWidget>
0012 class QCheckBox;
0013 class KPluralHandlingSpinBox;
0014 class QRadioButton;
0015 class QPushButton;
0016 namespace MailCommon
0017 {
0018 class FolderRequester;
0019 struct MAILCOMMON_EXPORT CollectionExpirySettings {
0020     [[nodiscard]] bool isValid() const;
0021 
0022     bool expiryGloballyOn = false;
0023     bool expiryMessagesWithInvalidDate = false;
0024     int daysToExpireRead = -1;
0025     int daysToExpireUnread = -1;
0026     ExpireCollectionAttribute::ExpireUnits mUnreadExpireUnits = ExpireCollectionAttribute::ExpireNever;
0027     ExpireCollectionAttribute::ExpireUnits mReadExpireUnits = ExpireCollectionAttribute::ExpireNever;
0028     ExpireCollectionAttribute::ExpireAction mExpireAction = ExpireCollectionAttribute::ExpireDelete;
0029     Akonadi::Collection::Id mExpireToFolderId = -1;
0030 };
0031 
0032 class MAILCOMMON_EXPORT CollectionExpiryWidget : public QWidget
0033 {
0034     Q_OBJECT
0035 public:
0036     explicit CollectionExpiryWidget(QWidget *parent = nullptr);
0037     ~CollectionExpiryWidget() override;
0038 
0039     void load(const MailCommon::CollectionExpirySettings &settings);
0040     void save(Akonadi::Collection &collection, bool saveSettings, bool expireNow);
0041     void save(const CollectionExpirySettings &collectionExpirySettings, Akonadi::Collection &collection, bool saveSettings, bool expireNow);
0042     [[nodiscard]] CollectionExpirySettings settings() const;
0043     void hideExpireNowButton();
0044     [[nodiscard]] static bool canHandle(const Akonadi::Collection &col);
0045 Q_SIGNALS:
0046     void saveAndExpireRequested();
0047     void configChanged(bool changed = true);
0048 
0049 private:
0050     [[nodiscard]] MAILCOMMON_NO_EXPORT bool validateExpireFolder(bool expireNow);
0051     [[nodiscard]] MAILCOMMON_NO_EXPORT MailCommon::ExpireCollectionAttribute *assignFolderAttribute(Akonadi::Collection &collection, bool &expireNow);
0052     MAILCOMMON_NO_EXPORT void slotChanged();
0053     KPluralHandlingSpinBox *const mExpireReadMailSB;
0054     KPluralHandlingSpinBox *const mExpireUnreadMailSB;
0055     QRadioButton *mMoveToRB = nullptr;
0056     FolderRequester *const mFolderSelector;
0057     QRadioButton *mDeletePermanentlyRB = nullptr;
0058     QPushButton *const mExpireNowPB;
0059     QCheckBox *const mExpireMailWithInvalidDateCB;
0060 };
0061 }
0062 MAILCOMMON_EXPORT QDebug operator<<(QDebug d, const MailCommon::CollectionExpirySettings &t);