File indexing completed on 2024-05-05 05:28:21

0001 /*
0002  * SPDX-FileCopyrightText: 2018 Dimitris Kardarakos <dimkard@posteo.net>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #ifndef LOCALCALENDAR_H
0008 #define LOCALCALENDAR_H
0009 
0010 #include <QSharedPointer>
0011 #include <KCalendarCore/Calendar>
0012 #include <KCalendarCore/FileStorage>
0013 #include <KCalendarCore/Event>
0014 #include <QVariantMap>
0015 
0016 class AlarmChecker;
0017 
0018 class LocalCalendar : public QObject
0019 {
0020     Q_OBJECT
0021     Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
0022     Q_PROPERTY(QString ownerName READ ownerName WRITE setOwnerName NOTIFY ownerNameChanged)
0023     Q_PROPERTY(QString ownerEmail READ ownerEmail WRITE setOwnerEmail NOTIFY ownerEmailChanged)
0024     Q_PROPERTY(bool isExternal READ isExternal NOTIFY isExternalChanged)
0025     Q_PROPERTY(KCalendarCore::Calendar *calendar READ calendarRaw NOTIFY calendarChanged)
0026 
0027 public:
0028     explicit LocalCalendar(QObject *parent = nullptr);
0029     ~LocalCalendar() override;
0030 
0031     KCalendarCore::Calendar::Ptr calendar();
0032     KCalendarCore::Calendar *calendarRaw() const;
0033     QString name() const;
0034     QString ownerName() const;
0035     QString ownerEmail() const;
0036     bool isExternal() const;
0037 
0038     void setName(const QString &calendarName);
0039     void setOwnerName(const QString &ownerName);
0040     void setOwnerEmail(const QString &ownerEmail);
0041 
0042     Q_INVOKABLE int todosCount(const QDate &date) const;
0043     Q_INVOKABLE int eventsCount(const QDate &date) const;
0044 
0045 public Q_SLOTS:
0046     void deleteCalendar();
0047     bool save();
0048 
0049 Q_SIGNALS:
0050     void calendarChanged();
0051     void nameChanged();
0052     void todosChanged();
0053     void eventsChanged();
0054     void ownerNameChanged();
0055     void ownerEmailChanged();
0056     void isExternalChanged();
0057 
0058 private:
0059     static QVariantMap canCreateFile(const QString &calendarName);
0060     void loadCalendar(const QString &calendarName);
0061     bool loadStorage();
0062     void reloadStorage();
0063 
0064     KCalendarCore::Calendar::Ptr m_calendar;
0065     KCalendarCore::FileStorage::Ptr m_cal_storage;
0066     QString m_name;
0067     QString m_fullpath;
0068     QDateTime m_fs_sync_dt;
0069     AlarmChecker *m_alarm_checker;
0070 };
0071 
0072 #endif // LOCALCALENDAR_H