File indexing completed on 2024-05-12 05:10:41
0001 // SPDX-FileCopyrightText: 2021 Claudio Cambra <claudio.cambra@gmail.com> 0002 // SPDX-License-Identifier: LGPL-2.1-or-later 0003 0004 #pragma once 0005 0006 #include <QDateTime> 0007 #include <QHash> 0008 #include <QTimer> 0009 0010 #include <Akonadi/ETMCalendar> 0011 #include <Akonadi/EntityTreeModel> 0012 #include <Akonadi/ServerManager> 0013 0014 #include <chrono> 0015 0016 class AlarmNotification; 0017 0018 class KalendarAlarmClient : public QObject 0019 { 0020 Q_OBJECT 0021 0022 public: 0023 explicit KalendarAlarmClient(QObject *parent = nullptr); 0024 ~KalendarAlarmClient() override; 0025 0026 /** Dismisses any further notification display for the alarm \p notification. */ 0027 void dismiss(AlarmNotification *notification); 0028 /** Suspends the display of the alarm \p notification. */ 0029 void suspend(AlarmNotification *notification, std::chrono::seconds sec); 0030 /** Show incidence in the calendar application. */ 0031 void showIncidence(const QString &uid, const QDateTime &occurrence, const QString &xdgActivationToken); 0032 0033 private: 0034 void deferredInit(); 0035 void restoreSuspendedFromConfig(); 0036 void storeNotification(AlarmNotification *notification); 0037 void removeNotification(AlarmNotification *notification); 0038 void addNotification(const QString &uid, const QString &text, const QDateTime &occurrence, const QDateTime &remindTime, bool wasSuspended); 0039 void checkAlarms(); 0040 void setupAkonadi(); 0041 [[nodiscard]] bool collectionsAvailable() const; 0042 void saveLastCheckTime(); 0043 [[nodiscard]] QDateTime 0044 occurrenceForAlarm(const KCalendarCore::Incidence::Ptr &incidence, const KCalendarCore::Alarm::Ptr &alarm, const QDateTime &from) const; 0045 0046 Akonadi::ETMCalendar::Ptr mCalendar; 0047 Akonadi::EntityTreeModel *mETM = nullptr; 0048 0049 QDateTime mLastChecked; 0050 QTimer mCheckTimer; 0051 QHash<QString, AlarmNotification *> m_notifications; 0052 };