1 /*
2  * SPDX-FileCopyrightText: 2020 Dimitris Kardarakos <dimkard@posteo.net>
3  *
4  * SPDX-License-Identifier: GPL-3.0-or-later
5  */
6 
7 #ifndef CONFERENCEMODEL_H
8 #define CONFERENCEMODEL_H
9 
10 #include <QAbstractListModel>
11 #include <QVariantMap>
12 #include <QVector>
13 #include <QHash>
14 
15 class Conference;
16 class ConferenceController;
17 
18 class ConferenceModel : public QAbstractListModel
19 {
20     Q_OBJECT
21 
22     Q_PROPERTY(ConferenceController *controller READ controller WRITE setController NOTIFY controllerChanged)
23     Q_PROPERTY(bool busyDownlading READ busyDownlading NOTIFY busyDownladingChanged)
24 
25 public:
26     enum Roles {
27         ConferenceId = Qt::UserRole + 1,
28         ConferenceName,
29         ConferenceDescription,
30         ConferenceIcalUrl,
31         ConferenceDays,
32         ConferenceVenueImageUrl,
33         ConferenceVenueLongitude,
34         ConferenceVenueLatitude,
35         ConferenceVenueOsmUrl,
36         ConferenceTimeZone,
37         PastUpcoming
38     };
39 
40     explicit ConferenceModel(QObject *parent = nullptr);
41 
42     QHash<int, QByteArray> roleNames() const override;
43     QVariant data(const QModelIndex &index, int role) const override;
44     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
45 
46     ConferenceController *controller() const;
47     void setController(ConferenceController *conferenceController);
48 
49     bool busyDownlading() const;
50 
51 Q_SIGNALS:
52     void controllerChanged();
53     void busyDownladingChanged();
54 
55 private Q_SLOTS:
56     void setBusyStatus(const bool downlading);
57 
58 private:
59     void loadConferences();
60     QString pastOrUpcoming(const int index) const;
61 
62     ConferenceController *m_controller;
63     QVector<Conference *> m_conferences;
64     bool m_busy_downloading;
65 
66 };
67 #endif
68