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 };