File indexing completed on 2024-04-28 04:49:05
0001 /* 0002 SPDX-FileCopyrightText: 2015 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr> 0003 0004 SPDX-License-Identifier: LGPL-3.0-or-later 0005 */ 0006 0007 #ifndef UPNPCONTENTDIRECTORYMODEL_H 0008 #define UPNPCONTENTDIRECTORYMODEL_H 0009 0010 #include "elisautils.h" 0011 #include "datatypes.h" 0012 0013 #include <QAbstractItemModel> 0014 0015 #include <memory> 0016 0017 class UpnpContentDirectoryModelPrivate; 0018 class UpnpControlContentDirectory; 0019 class MusicListenersManager; 0020 class DatabaseInterface; 0021 0022 class UpnpContentDirectoryModel : public QAbstractItemModel 0023 { 0024 Q_OBJECT 0025 0026 Q_PROPERTY(QString parentId 0027 READ parentId 0028 WRITE setParentId 0029 NOTIFY parentIdChanged) 0030 0031 Q_PROPERTY(QString browseFlag 0032 READ browseFlag 0033 WRITE setBrowseFlag 0034 NOTIFY browseFlagChanged) 0035 0036 Q_PROPERTY(QString filter 0037 READ filter 0038 WRITE setFilter 0039 NOTIFY filterChanged) 0040 0041 Q_PROPERTY(QString sortCriteria 0042 READ sortCriteria 0043 WRITE setSortCriteria 0044 NOTIFY sortCriteriaChanged) 0045 0046 Q_PROPERTY(UpnpControlContentDirectory* contentDirectory 0047 READ contentDirectory 0048 WRITE setContentDirectory 0049 NOTIFY contentDirectoryChanged) 0050 0051 Q_PROPERTY(bool useLocalIcons 0052 READ useLocalIcons 0053 WRITE setUseLocalIcons 0054 NOTIFY useLocalIconsChanged) 0055 0056 Q_PROPERTY(bool isBusy READ isBusy NOTIFY isBusyChanged) 0057 0058 public: 0059 0060 enum ItemClass { 0061 Container = 0, 0062 Album = 1, 0063 AudioTrack = 2, 0064 }; 0065 0066 Q_ENUM(ItemClass) 0067 0068 explicit UpnpContentDirectoryModel(QObject *parent = nullptr); 0069 0070 ~UpnpContentDirectoryModel() override; 0071 0072 [[nodiscard]] int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0073 0074 [[nodiscard]] QHash<int, QByteArray> roleNames() const override; 0075 0076 [[nodiscard]] Qt::ItemFlags flags(const QModelIndex &index) const override; 0077 0078 [[nodiscard]] QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 0079 0080 [[nodiscard]] QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; 0081 0082 [[nodiscard]] QModelIndex parent(const QModelIndex &child) const override; 0083 0084 [[nodiscard]] int columnCount(const QModelIndex &parent = QModelIndex()) const override; 0085 0086 [[nodiscard]] bool canFetchMore(const QModelIndex &parent) const override; 0087 0088 void fetchMore(const QModelIndex &parent) override; 0089 0090 [[nodiscard]] const QString& parentId() const; 0091 0092 [[nodiscard]] const QString& browseFlag() const; 0093 0094 void setBrowseFlag(const QString &flag); 0095 0096 [[nodiscard]] const QString& filter() const; 0097 0098 void setFilter(const QString &flag); 0099 0100 [[nodiscard]] const QString& sortCriteria() const; 0101 0102 void setSortCriteria(const QString &criteria); 0103 0104 [[nodiscard]] UpnpControlContentDirectory* contentDirectory() const; 0105 0106 void setContentDirectory(UpnpControlContentDirectory *directory); 0107 0108 [[nodiscard]] bool useLocalIcons() const; 0109 0110 void setUseLocalIcons(bool value); 0111 0112 [[nodiscard]] bool isBusy() const; 0113 0114 Q_SIGNALS: 0115 0116 void parentIdChanged(); 0117 0118 void browseFlagChanged(); 0119 0120 void filterChanged(); 0121 0122 void sortCriteriaChanged(); 0123 0124 void contentDirectoryChanged(); 0125 0126 void useLocalIconsChanged(); 0127 0128 void isBusyChanged(); 0129 0130 public Q_SLOTS: 0131 0132 void initializeByData(MusicListenersManager *manager, DatabaseInterface *database, 0133 ElisaUtils::PlayListEntryType modelType, ElisaUtils::FilterType filter, 0134 const DataTypes::DataType &dataFilter); 0135 0136 void setParentId(QString parentId); 0137 0138 private Q_SLOTS: 0139 0140 void contentChanged(const QString &parentId); 0141 0142 private: 0143 0144 [[nodiscard]] QModelIndex indexFromInternalId(quintptr internalId) const; 0145 0146 std::unique_ptr<UpnpContentDirectoryModelPrivate> d; 0147 0148 }; 0149 0150 Q_DECLARE_METATYPE(UpnpContentDirectoryModel::ItemClass) 0151 0152 #endif // UPNPCONTENTDIRECTORYMODEL_H 0153