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