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 }