File indexing completed on 2024-04-21 05:50:57

0001 /*
0002  * SPDX-FileCopyrightText: 2020 Dimitris Kardarakos <dimkard@posteo.net>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #include "localcalendar.h"
0008 #include "calendarcontroller.h"
0009 #include "alarmchecker.h"
0010 #include <QDebug>
0011 #include <KLocalizedString>
0012 
0013 LocalCalendar::LocalCalendar(QObject *parent)
0014     : QObject {parent}, m_calendar_id {QString {}}, m_calendar_tz_id {QString {}}, m_calendar_url {QString {}}, m_calendar_type {LocalCalendar::CalendarType::None}, m_calendar {nullptr}, m_cal_controller {nullptr}, m_alarm_checker {new AlarmChecker {this}}, m_busy_downloading {false}
0015 {
0016     connect(this, &LocalCalendar::calendarIdChanged, this, &LocalCalendar::createCalendar);
0017     connect(this, &LocalCalendar::calendarTzIdChanged, this, &LocalCalendar::createCalendar);
0018     connect(this, &LocalCalendar::calendarUrlChanged, this, &LocalCalendar::createCalendar);
0019     connect(this, &LocalCalendar::calendarTypeChanged, this, &LocalCalendar::createCalendar);
0020     connect(this, &LocalCalendar::eventsChanged, m_alarm_checker, &AlarmChecker::scheduleAlarmCheck);
0021 }
0022 
0023 KCalendarCore::MemoryCalendar::Ptr LocalCalendar::memorycalendar() const
0024 {
0025     return m_calendar;
0026 }
0027 
0028 void LocalCalendar::createCalendar()
0029 {
0030     if (m_calendar_id.isEmpty() || m_calendar_tz_id.isEmpty() || (m_calendar_type == LocalCalendar::CalendarType::None) || ((m_calendar_type == LocalCalendar::CalendarType::Conference) && m_calendar_url.isEmpty())) {
0031         qDebug() << "No sufficient calendar information provided";
0032         return;
0033     }
0034 
0035     if (m_calendar_type == LocalCalendar::CalendarType::Conference) {
0036         qDebug() << "Creating online calendar: " <<  m_calendar_id;
0037 
0038         //Check if a local copy of the calendar already exists and set it accordingly to the member property
0039         m_calendar =  m_cal_controller->memoryCalendar(m_calendar_id);
0040 
0041         //Even if a local copy exists, get a fresh copy of the calendar
0042         loadOnlineCalendar();
0043     } else {
0044         qDebug() << "Creating local calendar: " << m_calendar_id;
0045 
0046         m_calendar = m_cal_controller->createLocalCalendar(m_calendar_id, m_calendar_tz_id.toUtf8());
0047     }
0048     Q_EMIT memorycalendarChanged();
0049     Q_EMIT categoriesChanged();
0050     Q_EMIT eventsChanged();
0051 
0052 }
0053 
0054 QStringList LocalCalendar::categories() const
0055 {
0056     if (m_calendar) {
0057         return m_calendar->categories();
0058     }
0059 
0060     return QStringList {};
0061 }
0062 
0063 void LocalCalendar::onlineCalendarReady(const QString &calendarId)
0064 {
0065     qDebug() << "Calendar " << calendarId << " is ready";
0066 
0067     if (calendarId == m_calendar_id) {
0068         m_calendar = m_cal_controller->memoryCalendar(calendarId);
0069 
0070         Q_EMIT memorycalendarChanged();
0071         Q_EMIT categoriesChanged();
0072         Q_EMIT eventsChanged();
0073     }
0074 }
0075 
0076 void LocalCalendar::loadOnlineCalendar()
0077 {
0078     m_cal_controller->createCalendarFromUrl(m_calendar_id, QUrl {m_calendar_url}, m_calendar_tz_id.toUtf8());
0079 }
0080 
0081 CalendarController *LocalCalendar::calendarController() const
0082 {
0083     return m_cal_controller;
0084 }
0085 
0086 void LocalCalendar::setCalendarController(CalendarController *const controller)
0087 {
0088     m_cal_controller = controller;
0089 
0090     if (m_cal_controller != nullptr) {
0091         connect(m_cal_controller, &CalendarController::calendarDownloaded, this, &LocalCalendar::onlineCalendarReady);
0092         connect(m_cal_controller, &CalendarController::downlading, this, &LocalCalendar::setBusyStatus);
0093     }
0094 
0095     Q_EMIT calendarControllerChanged();
0096 }
0097 
0098 QString LocalCalendar::calendarId() const
0099 {
0100     return m_calendar_id;
0101 }
0102 
0103 void LocalCalendar::setCalendarId(const QString &id)
0104 {
0105     if (m_calendar_id != id) {
0106         m_calendar_id = id;
0107         Q_EMIT calendarIdChanged();
0108     }
0109 }
0110 
0111 int LocalCalendar::calendarType() const
0112 {
0113     return m_calendar_type;
0114 }
0115 
0116 void LocalCalendar::setCalendarType(const int type)
0117 {
0118     if (m_calendar_type != type) {
0119         m_calendar_type = type;
0120         Q_EMIT calendarTypeChanged();
0121     }
0122 }
0123 
0124 QString LocalCalendar::calendarUrl() const
0125 {
0126     return m_calendar_url;
0127 }
0128 
0129 void LocalCalendar::setCalendarUrl(const QString &url)
0130 {
0131     if (m_calendar_url != url) {
0132         m_calendar_url = url;
0133         Q_EMIT calendarUrlChanged();
0134     }
0135 }
0136 
0137 QString LocalCalendar::calendarTzId() const
0138 {
0139     return m_calendar_tz_id;
0140 }
0141 
0142 void LocalCalendar::setCalendarTzId(const QString &tzId)
0143 {
0144     if (m_calendar_tz_id != tzId) {
0145         m_calendar_tz_id = tzId;
0146         Q_EMIT calendarTzIdChanged();
0147     }
0148 }
0149 
0150 bool LocalCalendar::busyDownlading() const
0151 {
0152     return m_busy_downloading;
0153 }
0154 
0155 void LocalCalendar::setBusyStatus(const QString &calendarId, const bool downlading)
0156 {
0157     if ((m_calendar_id == calendarId) && (m_busy_downloading != downlading)) {
0158         m_busy_downloading = downlading;
0159         Q_EMIT busyDownladingChanged();
0160     }
0161 }
0162 
0163 #include "moc_localcalendar.cpp"