File indexing completed on 2024-04-14 05:43:44

0001 /*
0002  * SPDX-FileCopyrightText: 2020 Dimitris Kardarakos <dimkard@posteo.net>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #ifndef CALENDAR_CONTROLLER_H
0008 #define CALENDAR_CONTROLLER_H
0009 
0010 #include <QObject>
0011 #include <QVariantMap>
0012 #include <QMap>
0013 #include <QQmlEngine>
0014 #include <QNetworkAccessManager>
0015 #include <KCalendarCore/FileStorage>
0016 #include <KCalendarCore/MemoryCalendar>
0017 
0018 class LocalCalendar;
0019 
0020 class CalendarController : public QObject
0021 {
0022     Q_OBJECT
0023 
0024     Q_PROPERTY(QString calendars READ calendars NOTIFY calendarsChanged)
0025 
0026 public:
0027     explicit CalendarController(QObject *parent = nullptr);
0028     void setNetworkAccessManager(QNetworkAccessManager *nam);
0029 
0030     static QObject *qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine);
0031 
0032     QString calendars() const;
0033     QString calendarFile(const QString &calendarId);
0034 
0035     KCalendarCore::MemoryCalendar::Ptr createLocalCalendar(const QString &calendarId, const QByteArray &timeZoneId);
0036     KCalendarCore::MemoryCalendar::Ptr memoryCalendar(const QString &calendarId) const;
0037     void createCalendarFromUrl(const QString &calendarId, const QUrl &url, const QByteArray &timeZoneId);
0038     void deleteCalendar(const QString &calendarId);
0039     bool save(const QString &calendarId);
0040     Q_INVOKABLE QVariantMap exportData(const QString &calendarName, LocalCalendar *sourceCalendar);
0041 
0042 Q_SIGNALS:
0043     void calendarsChanged();
0044     void calendarDownloaded(const QString &calendarId);
0045     void downlading(const QString &calendarId, const bool downlading);
0046 
0047 private:
0048     void downloadFinished(const QString &calendarId, const QByteArray &timeZoneId, const QString &filePath);
0049     static QString filenameToPath(const QString &calendarId);
0050     void removeCalendarFromConfig(const QString &calendarId);
0051     bool saveToDisk(const QString &filename, const QByteArray &data);
0052     void loadSavedConferences();
0053     void addConferenceToConfig(const QString &calendarId);
0054     void addTzIdToConfig(const QString &calendarId, const QByteArray &timeZoneId);
0055     QByteArray tzIdFromConfig(const QString &calendarId) const;
0056 
0057     QMap<QString, KCalendarCore::FileStorage::Ptr> m_storages;
0058     QMap<QString, KCalendarCore::MemoryCalendar::Ptr> m_calendars;
0059 
0060     class Private;
0061     Private *d;
0062 };
0063 
0064 #endif