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

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