File indexing completed on 2024-06-23 05:45:40
0001 /* 0002 * Copyright 2020 Han Young <hanyoung@protonmail.com> 0003 * Copyright 2020-2021 Devin Lin <devin@kde.org> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "alarm.h" 0009 0010 #include "alarmmodel.h" 0011 #include "settingsmodel.h" 0012 #include "utilmodel.h" 0013 0014 #include <KLocalizedString> 0015 0016 #include <QDateTime> 0017 0018 Alarm::Alarm(){}; 0019 Alarm::Alarm(const QString &uuid) 0020 { 0021 m_interface = new org::kde::kclock::Alarm(QStringLiteral("org.kde.kclockd"), QStringLiteral("/Alarms/") + uuid, QDBusConnection::sessionBus(), this); 0022 0023 if (m_interface->isValid()) { 0024 connect(m_interface, &OrgKdeKclockAlarmInterface::nameChanged, this, &Alarm::updateName); 0025 connect(m_interface, &OrgKdeKclockAlarmInterface::enabledChanged, this, &Alarm::updateEnabled); 0026 connect(m_interface, &OrgKdeKclockAlarmInterface::hoursChanged, this, &Alarm::updateHours); 0027 connect(m_interface, &OrgKdeKclockAlarmInterface::minutesChanged, this, &Alarm::updateMinutes); 0028 connect(m_interface, &OrgKdeKclockAlarmInterface::daysOfWeekChanged, this, &Alarm::updateDaysOfWeek); 0029 connect(m_interface, &OrgKdeKclockAlarmInterface::audioPathChanged, this, &Alarm::updateAudioPath); 0030 connect(m_interface, &OrgKdeKclockAlarmInterface::ringDurationChanged, this, &Alarm::updateRingDuration); 0031 connect(m_interface, &OrgKdeKclockAlarmInterface::snoozeDurationChanged, this, &Alarm::updateSnoozeDuration); 0032 connect(m_interface, &OrgKdeKclockAlarmInterface::snoozedLengthChanged, this, &Alarm::updateSnoozedLength); 0033 connect(m_interface, &OrgKdeKclockAlarmInterface::ringingChanged, this, &Alarm::updateRinging); 0034 connect(m_interface, &OrgKdeKclockAlarmInterface::nextRingTimeChanged, this, &Alarm::updateNextRingTime); 0035 0036 m_uuid = QUuid(m_interface->uuid().value()); 0037 updateName(); 0038 updateEnabled(); 0039 updateHours(); 0040 updateMinutes(); 0041 updateDaysOfWeek(); 0042 updateAudioPath(); 0043 updateRingDuration(); 0044 updateSnoozeDuration(); 0045 updateSnoozedLength(); 0046 updateRinging(); 0047 updateNextRingTime(); 0048 0049 connect(this, &Alarm::hoursChanged, this, [this] { 0050 Q_EMIT formattedTimeChanged(); 0051 }); 0052 connect(this, &Alarm::minutesChanged, this, [this] { 0053 Q_EMIT formattedTimeChanged(); 0054 }); 0055 connect(SettingsModel::instance(), &SettingsModel::timeFormatChanged, this, [this] { 0056 Q_EMIT formattedTimeChanged(); 0057 }); 0058 } else { 0059 m_isValid = false; 0060 } 0061 } 0062 0063 QUuid Alarm::uuid() const 0064 { 0065 return m_uuid; 0066 } 0067 0068 QString Alarm::name() const 0069 { 0070 return m_name; 0071 } 0072 0073 void Alarm::setName(const QString &name) 0074 { 0075 m_interface->setProperty("name", name); 0076 } 0077 0078 bool Alarm::enabled() const 0079 { 0080 return m_enabled; 0081 } 0082 0083 void Alarm::setEnabled(bool enabled) 0084 { 0085 m_interface->setProperty("enabled", enabled); 0086 } 0087 0088 QString Alarm::formattedTime() const 0089 { 0090 return QLocale::system().toString(QTime(m_hours, m_minutes), UtilModel::instance()->timeFormat()); 0091 } 0092 0093 int Alarm::hours() const 0094 { 0095 return m_hours; 0096 } 0097 0098 void Alarm::setHours(int hours) 0099 { 0100 m_interface->setProperty("hours", hours); 0101 } 0102 0103 int Alarm::minutes() const 0104 { 0105 return m_minutes; 0106 } 0107 0108 void Alarm::setMinutes(int minutes) 0109 { 0110 m_interface->setProperty("minutes", minutes); 0111 } 0112 0113 int Alarm::daysOfWeek() const 0114 { 0115 return m_daysOfWeek; 0116 } 0117 0118 void Alarm::setDaysOfWeek(int daysOfWeek) 0119 { 0120 m_interface->setProperty("daysOfWeek", daysOfWeek); 0121 } 0122 0123 QString Alarm::audioPath() const 0124 { 0125 return m_audioPath; 0126 } 0127 0128 void Alarm::setAudioPath(const QString &path) 0129 { 0130 m_interface->setProperty("audioPath", path); 0131 } 0132 0133 int Alarm::ringDuration() const 0134 { 0135 return m_ringDuration; 0136 } 0137 0138 void Alarm::setRingDuration(int ringDuration) 0139 { 0140 m_interface->setProperty("ringDuration", ringDuration); 0141 } 0142 0143 int Alarm::snoozeDuration() const 0144 { 0145 return m_snoozeDuration; 0146 } 0147 0148 void Alarm::setSnoozeDuration(int snoozeDuration) 0149 { 0150 m_interface->setProperty("snoozeDuration", snoozeDuration); 0151 } 0152 0153 int Alarm::snoozedLength() const 0154 { 0155 return m_snoozedLength ? m_snoozedLength / 60 : 0; 0156 } 0157 0158 bool Alarm::ringing() const 0159 { 0160 return m_ringing; 0161 } 0162 0163 quint64 Alarm::nextRingTime() const 0164 { 0165 return m_nextRingTime; 0166 } 0167 0168 bool Alarm::isValid() const 0169 { 0170 return m_isValid; 0171 } 0172 0173 void Alarm::dismiss() 0174 { 0175 m_interface->dismiss(); 0176 } 0177 0178 void Alarm::snooze() 0179 { 0180 m_interface->snooze(); 0181 } 0182 0183 QString Alarm::timeToRingFormatted() 0184 { 0185 updateNextRingTime(); 0186 return UtilModel::instance()->timeToRingFormatted(nextRingTime()); 0187 } 0188 0189 void Alarm::save() 0190 { 0191 m_interface->save(); 0192 } 0193 0194 void Alarm::updateName() 0195 { 0196 m_name = m_interface->name(); 0197 Q_EMIT nameChanged(); 0198 } 0199 0200 void Alarm::updateEnabled() 0201 { 0202 m_enabled = m_interface->enabled(); 0203 Q_EMIT enabledChanged(); 0204 } 0205 0206 void Alarm::updateHours() 0207 { 0208 m_hours = m_interface->hours(); 0209 Q_EMIT hoursChanged(); 0210 } 0211 0212 void Alarm::updateMinutes() 0213 { 0214 m_minutes = m_interface->minutes(); 0215 Q_EMIT minutesChanged(); 0216 } 0217 0218 void Alarm::updateDaysOfWeek() 0219 { 0220 m_daysOfWeek = m_interface->daysOfWeek(); 0221 Q_EMIT daysOfWeekChanged(); 0222 } 0223 0224 void Alarm::updateAudioPath() 0225 { 0226 m_audioPath = m_interface->audioPath(); 0227 Q_EMIT audioPathChanged(); 0228 } 0229 0230 void Alarm::updateRingDuration() 0231 { 0232 m_ringDuration = m_interface->ringDuration(); 0233 Q_EMIT ringDurationChanged(); 0234 } 0235 0236 void Alarm::updateSnoozeDuration() 0237 { 0238 m_snoozeDuration = m_interface->snoozeDuration(); 0239 Q_EMIT snoozeDurationChanged(); 0240 } 0241 0242 void Alarm::updateSnoozedLength() 0243 { 0244 m_snoozedLength = m_interface->snoozedLength(); 0245 Q_EMIT snoozedLengthChanged(); 0246 } 0247 0248 void Alarm::updateRinging() 0249 { 0250 m_ringing = m_interface->ringing(); 0251 Q_EMIT ringingChanged(); 0252 } 0253 0254 void Alarm::updateNextRingTime() 0255 { 0256 m_nextRingTime = m_interface->nextRingTime(); 0257 Q_EMIT nextRingTimeChanged(); 0258 }