File indexing completed on 2024-04-28 04:49:04
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 DIDLPARSER_H 0008 #define DIDLPARSER_H 0009 0010 #include "datatypes.h" 0011 0012 #include <QObject> 0013 #include <QHash> 0014 #include <QString> 0015 0016 #include <memory> 0017 0018 class UpnpControlAbstractServiceReply; 0019 class QDomNode; 0020 class UpnpControlContentDirectory; 0021 class DidlParserPrivate; 0022 0023 class DidlParser : public QObject 0024 { 0025 0026 Q_OBJECT 0027 0028 Q_PROPERTY(QString browseFlag 0029 READ browseFlag 0030 WRITE setBrowseFlag 0031 NOTIFY browseFlagChanged) 0032 0033 Q_PROPERTY(QString filter 0034 READ filter 0035 WRITE setFilter 0036 NOTIFY filterChanged) 0037 0038 Q_PROPERTY(QString sortCriteria 0039 READ sortCriteria 0040 WRITE setSortCriteria 0041 NOTIFY sortCriteriaChanged) 0042 0043 Q_PROPERTY(QString searchCriteria 0044 READ searchCriteria 0045 WRITE setSearchCriteria 0046 NOTIFY searchCriteriaChanged) 0047 0048 Q_PROPERTY(QString parentId 0049 READ parentId 0050 WRITE setParentId 0051 NOTIFY parentIdChanged) 0052 0053 Q_PROPERTY(QString deviceUUID 0054 READ deviceUUID 0055 WRITE setDeviceUUID 0056 NOTIFY deviceUUIDChanged) 0057 0058 Q_PROPERTY(UpnpControlContentDirectory* contentDirectory 0059 READ contentDirectory 0060 WRITE setContentDirectory 0061 NOTIFY contentDirectoryChanged) 0062 0063 Q_PROPERTY(bool isDataValid 0064 READ isDataValid 0065 NOTIFY isDataValidChanged) 0066 0067 public: 0068 0069 explicit DidlParser(QObject *parent = nullptr); 0070 0071 ~DidlParser() override; 0072 0073 [[nodiscard]] const QString& browseFlag() const; 0074 0075 [[nodiscard]] const QString& filter() const; 0076 0077 [[nodiscard]] const QString& sortCriteria() const; 0078 0079 [[nodiscard]] const QString& searchCriteria() const; 0080 0081 [[nodiscard]] UpnpControlContentDirectory* contentDirectory() const; 0082 0083 [[nodiscard]] bool isDataValid() const; 0084 0085 void browse(int startIndex = 0, int maximumNmberOfResults = 0); 0086 0087 void search(int startIndex = 0, int maximumNumberOfResults = 0); 0088 0089 [[nodiscard]] QString parentId() const; 0090 0091 [[nodiscard]] const QString& deviceUUID() const; 0092 0093 [[nodiscard]] const QVector<QString> &newMusicTrackIds() const; 0094 0095 [[nodiscard]] const QHash<QString, DataTypes::UpnpTrackDataType> &newMusicTracks() const; 0096 0097 [[nodiscard]] const QHash<QString, QUrl>& covers() const; 0098 0099 Q_SIGNALS: 0100 0101 void browseFlagChanged(); 0102 0103 void filterChanged(); 0104 0105 void sortCriteriaChanged(); 0106 0107 void searchCriteriaChanged(); 0108 0109 void contentDirectoryChanged(); 0110 0111 void isDataValidChanged(const QString &parentId); 0112 0113 void parentIdChanged(); 0114 0115 void deviceUUIDChanged(); 0116 0117 public Q_SLOTS: 0118 0119 void setBrowseFlag(QString flag); 0120 0121 void setFilter(QString flag); 0122 0123 void setSortCriteria(QString criteria); 0124 0125 void setSearchCriteria(QString criteria); 0126 0127 void setContentDirectory(UpnpControlContentDirectory *directory); 0128 0129 void setParentId(QString parentId); 0130 0131 void setDeviceUUID(QString deviceUUID); 0132 0133 void systemUpdateIDChanged(); 0134 0135 private Q_SLOTS: 0136 0137 void browseFinished(UpnpControlAbstractServiceReply *self); 0138 0139 void searchFinished(UpnpControlAbstractServiceReply *self); 0140 0141 private: 0142 0143 void decodeContainerNode(const QDomNode &containerNode, QHash<QString, DataTypes::UpnpTrackDataType> &newData, QVector<QString> &newDataIds); 0144 0145 void decodeAudioTrackNode(const QDomNode &itemNode, QHash<QString, DataTypes::UpnpTrackDataType> &newData, QVector<QString> &newDataIds); 0146 0147 void groupNewTracksByAlbums(); 0148 0149 std::unique_ptr<DidlParserPrivate> d; 0150 0151 }; 0152 0153 #endif // DIDLPARSER_H