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"