File indexing completed on 2024-06-23 05:45:41
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 #pragma once 0009 0010 #include "alarm.h" 0011 #include "alarmmodelinterface.h" 0012 0013 #include <QAbstractListModel> 0014 #include <QObject> 0015 0016 class AlarmModel : public QAbstractListModel 0017 { 0018 Q_OBJECT 0019 Q_PROPERTY(bool connectedToDaemon READ connectedToDaemon NOTIFY connectedToDaemonChanged) 0020 0021 public: 0022 static AlarmModel *instance(); 0023 0024 enum { 0025 AlarmRole, 0026 }; 0027 0028 void load(); 0029 0030 int rowCount(const QModelIndex &parent) const override; 0031 QVariant data(const QModelIndex &index, int role) const override; 0032 Qt::ItemFlags flags(const QModelIndex &index) const override; 0033 QHash<int, QByteArray> roleNames() const override; 0034 0035 Q_INVOKABLE void remove(int index); 0036 0037 Q_INVOKABLE void addAlarm(const QString &name, 0038 int hours, 0039 int minutes, 0040 int daysOfWeek, 0041 const QString &audioPath, 0042 int ringDuration, 0043 int snoozeDuration); // in 24 hours units, ringTone could be chosen from a list 0044 0045 Q_INVOKABLE QString timeToRingFormatted(int hours, int minutes, int daysOfWeek); // for new alarm use 0046 0047 bool connectedToDaemon(); 0048 void setConnectedToDaemon(bool connectedToDaemon); 0049 0050 Q_SIGNALS: 0051 void connectedToDaemonChanged(); 0052 0053 private Q_SLOTS: 0054 void addAlarmInternal(QString uuid); 0055 void removeAlarm(const QString &uuid); 0056 0057 private: 0058 org::kde::kclock::AlarmModel *m_interface; 0059 QDBusServiceWatcher *m_watcher; 0060 bool m_connectedToDaemon = false; 0061 0062 explicit AlarmModel(QObject *parent = nullptr); 0063 QList<Alarm *> alarmsList; 0064 };