File indexing completed on 2024-04-14 05:43:44

0001 /*
0002  * SPDX-FileCopyrightText: 2020 Dimitris Kardarakos <dimkard@posteo.net>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #ifndef CONFERENCEMODEL_H
0008 #define CONFERENCEMODEL_H
0009 
0010 #include <QAbstractListModel>
0011 #include <QVector>
0012 #include <QHash>
0013 
0014 class Conference;
0015 class ConferenceController;
0016 
0017 class ConferenceModel : public QAbstractListModel
0018 {
0019     Q_OBJECT
0020 
0021     Q_PROPERTY(ConferenceController *controller READ controller WRITE setController NOTIFY controllerChanged)
0022     Q_PROPERTY(bool busyDownlading READ busyDownlading NOTIFY busyDownladingChanged)
0023 
0024 public:
0025     enum Roles {
0026         ConferenceId = Qt::UserRole + 1,
0027         ConferenceName,
0028         ConferenceDescription,
0029         ConferenceIcalUrl,
0030         ConferenceDays,
0031         ConferenceVenueImageUrl,
0032         ConferenceVenueLongitude,
0033         ConferenceVenueLatitude,
0034         ConferenceVenueOsmUrl,
0035         ConferenceTimeZone,
0036         PastUpcoming
0037     };
0038 
0039     explicit ConferenceModel(QObject *parent = nullptr);
0040 
0041     QHash<int, QByteArray> roleNames() const override;
0042     QVariant data(const QModelIndex &index, int role) const override;
0043     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0044 
0045     ConferenceController *controller() const;
0046     void setController(ConferenceController *conferenceController);
0047 
0048     bool busyDownlading() const;
0049 
0050 Q_SIGNALS:
0051     void controllerChanged();
0052     void busyDownladingChanged();
0053 
0054 private Q_SLOTS:
0055     void setBusyStatus(const bool downlading);
0056 
0057 private:
0058     void loadConferences();
0059     QString pastOrUpcoming(const int index) const;
0060 
0061     ConferenceController *m_controller;
0062     QVector<Conference *> m_conferences;
0063     bool m_busy_downloading;
0064 
0065 };
0066 #endif