File indexing completed on 2024-04-28 17:05:35

0001 /*
0002  * SPDX-FileCopyrightText: 2020 Dimitris Kardarakos <dimkard@posteo.net>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #ifndef EVENTCONTROLLER_H
0008 #define EVENTCONTROLLER_H
0009 
0010 #include <QObject>
0011 #include <QVariantMap>
0012 #include <QQmlEngine>
0013 
0014 class CalendarController;
0015 class LocalCalendar;
0016 class SettingsController;
0017 
0018 class EventController : public QObject
0019 {
0020     Q_OBJECT
0021 
0022     Q_PROPERTY(CalendarController *calendarController READ calendarController WRITE setCalendarController NOTIFY calendarControllerChanged)
0023 
0024 public:
0025     enum EventCheck {
0026         NotExistsNotOverlapping = -1,
0027         Exists,
0028         NotExistsButOverlaps,
0029         NoCalendarExists
0030     };
0031 
0032     explicit EventController(QObject *parent = nullptr);
0033 
0034     static QObject *qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine);
0035 
0036     CalendarController *calendarController();
0037     void setCalendarController(CalendarController *const controller);
0038 
0039     Q_INVOKABLE void remove(LocalCalendar *calendar, const QVariantMap &event);
0040     Q_INVOKABLE QVariantMap addEdit(LocalCalendar *calendar, const QVariantMap &event);
0041 Q_SIGNALS:
0042     void calendarControllerChanged();
0043 
0044 private:
0045     /**
0046      * @brief Check if an event is already registered or overlapping events exist
0047      *
0048      * @param calendar p_calendar: The calendar of the favorites
0049      * @param event p_event: The to-be-registered event
0050      * @return A QVariantMap with two members
0051      * int result:
0052      *   Set to NotExistsNotOverlapping if the event is not registered and no overlapping events exist
0053      *   Set to Exists if the event is already registered
0054      *   Set to NotExistsButOverlaps if the event is not registered but overlapping events exist
0055      *   Set to NoCalendarExists if calendar argument does not point at a calendar
0056      * QString events:
0057      *   If NotExistsNotOverlapping, a success message
0058      *   If Exists, an information message that the event already exists
0059      *   If NotExistsButOverlaps, a comma separated list of their subjects
0060      *   If NoCalendarExists, let the user know that an error has occured
0061      */
0062     QVariantMap eventCheck(LocalCalendar *calendar, const QVariantMap &event);
0063 
0064     CalendarController *m_cal_controller;
0065     SettingsController *m_settings_controller;
0066 
0067 };
0068 #endif