File indexing completed on 2025-04-27 08:12:25
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 <QVector> 0012 #include <QSharedDataPointer> 0013 #include <QVariantMap> 0014 0015 #include <KCalendarCore/Calendar> 0016 #include <KCalendarCore/Event> 0017 #include <KCalendarCore/Todo> 0018 #include "attendeesmodel.h" 0019 #include "localcalendar.h" 0020 0021 class CalendarController : public QObject 0022 { 0023 Q_OBJECT 0024 Q_PROPERTY(LocalCalendar * activeCalendar READ activeCalendar NOTIFY activeCalendarChanged) 0025 0026 public: 0027 enum MessageType { 0028 Question = 0, 0029 PositiveAnswer, 0030 NegativeAnswer 0031 }; 0032 0033 static CalendarController &instance(); 0034 0035 void importCalendarData(const QByteArray &data); 0036 Q_INVOKABLE void importFromBuffer(const QString &targetCalendar); 0037 Q_INVOKABLE void importFromBuffer(LocalCalendar *localCalendar); 0038 Q_INVOKABLE void abortImporting(); 0039 Q_INVOKABLE void removeEvent(LocalCalendar *localCalendar, const QVariantMap &event); 0040 Q_INVOKABLE void upsertEvent(const QVariantMap &event, const QVariantList &attendeesList); 0041 /** 0042 * @brief Returns the current datetime in the local time zone 0043 * 0044 * @return QDateTime 0045 */ 0046 Q_INVOKABLE QDateTime localSystemDateTime() const; 0047 /** 0048 * @brief Validate an event before saving 0049 * 0050 * @return A QVariantMap response to be handled by the caller 0051 */ 0052 Q_INVOKABLE QVariantMap validateEvent(const QVariantMap &eventMap) const; 0053 Q_INVOKABLE void removeTodo(LocalCalendar *localCalendar, const QVariantMap &todo); 0054 Q_INVOKABLE void upsertTodo(LocalCalendar *localCalendar, const QVariantMap &todo); 0055 Q_INVOKABLE QVariantMap validateTodo(const QVariantMap &todo) const; 0056 Q_INVOKABLE QString fileNameFromUrl(const QUrl &sourcePath); 0057 Q_INVOKABLE QVariantMap exportData(const QString &calendarName); 0058 0059 LocalCalendar *activeCalendar() const; 0060 0061 Q_SIGNALS: 0062 void statusMessageChanged(const QString &statusMessage, const int messageType); 0063 void activeCalendarChanged(); 0064 0065 private: 0066 explicit CalendarController(QObject *parent = nullptr); 0067 0068 void sendMessage(const bool positive); 0069 QVector<QSharedPointer<KCalendarCore::Event>> m_events; 0070 QVector<QSharedPointer<KCalendarCore::Todo>> m_todos; 0071 0072 std::unique_ptr<LocalCalendar> m_calendar; 0073 }; 0074 #endif