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