File indexing completed on 2024-05-12 16:21:15

0001 // SPDX-FileCopyrightText: 2021 Jonah BrĂ¼chert <jbb@kaidan.im>
0002 //
0003 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 
0005 #pragma once
0006 
0007 #include <QAbstractListModel>
0008 #include <QUrl>
0009 
0010 #include "asyncytmusic.h"
0011 #include "abstractytmusicmodel.h"
0012 
0013 class AlbumModel : public AbstractYTMusicModel
0014 {
0015     Q_OBJECT
0016     Q_PROPERTY(QString browseId READ browseId WRITE setBrowseId NOTIFY browseIdChanged REQUIRED)
0017 
0018     Q_PROPERTY(QString title READ title NOTIFY titleChanged)
0019     Q_PROPERTY(QString artists READ artists NOTIFY artistsChanged)
0020     Q_PROPERTY(QUrl thumbnailUrl READ thumbnailUrl NOTIFY thumbnailUrlChanged)
0021     Q_PROPERTY(QString playlistId READ playlistId NOTIFY playlistIdChanged)
0022     Q_PROPERTY(QUrl webUrl READ webUrl NOTIFY playlistIdChanged)
0023 
0024 public:
0025     enum Role {
0026         Title = Qt::UserRole + 1,
0027         VideoId,
0028         Artists,
0029         ThumbnailUrl,
0030         ArtistsDisplayString
0031     };
0032 
0033     explicit AlbumModel(QObject *parent = nullptr);
0034 
0035     int rowCount(const QModelIndex &parent) const override;
0036     QVariant data(const QModelIndex &index, int role) const override;
0037     QHash<int, QByteArray> roleNames() const override;
0038 
0039     QString browseId() const;
0040     void setBrowseId(const QString &value);
0041     Q_SIGNAL void browseIdChanged();
0042 
0043     QString title() const;
0044     Q_SIGNAL void titleChanged();
0045 
0046     QString artists() const;
0047     Q_SIGNAL void artistsChanged();
0048     QUrl thumbnailUrl() const;
0049     Q_SIGNAL void thumbnailUrlChanged();
0050 
0051     QString playlistId() const;
0052     Q_SIGNAL void playlistIdChanged();
0053 
0054     QUrl webUrl() const;
0055 
0056     const album::Album &album() const;
0057 
0058 private:
0059     QString m_browseId;
0060 
0061     album::Album m_album;
0062 };