mirror of
https://github.com/HenkKalkwater/harbour-sailfin.git
synced 2025-09-04 01:42:44 +00:00
Added MusicAlbumPage
- [UI]: Added specialized view for music albums - Prepared RemoteImageView for fading in image when loaded
This commit is contained in:
parent
a29ab3dff4
commit
040aeb1a40
10 changed files with 330 additions and 22 deletions
|
@ -140,6 +140,7 @@ public:
|
|||
Q_PROPERTY(QList<QString> fields MEMBER m_fields NOTIFY fieldsChanged)
|
||||
Q_PROPERTY(QString seasonId MEMBER m_seasonId NOTIFY seasonIdChanged)
|
||||
Q_PROPERTY(QList<QString> imageTypes MEMBER m_imageTypes NOTIFY imageTypesChanged)
|
||||
Q_PROPERTY(QList<QString> includeItemTypes MEMBER m_includeItemTypes NOTIFY includeItemTypesChanged)
|
||||
Q_PROPERTY(bool recursive MEMBER m_recursive)
|
||||
Q_PROPERTY(SortOrder sortOrder MEMBER m_sortOrder NOTIFY sortOrderChanged)
|
||||
|
||||
|
@ -182,6 +183,7 @@ signals:
|
|||
void seasonIdChanged(QString newSeasonId);
|
||||
void fieldsChanged(QList<QString> newFields);
|
||||
void imageTypesChanged(QList<QString> newImageTypes);
|
||||
void includeItemTypesChanged(const QList<QString> &newIncludeItemTypes);
|
||||
|
||||
public slots:
|
||||
/**
|
||||
|
@ -225,9 +227,10 @@ protected:
|
|||
bool m_addUserId = false;
|
||||
QString m_parentId;
|
||||
QString m_seasonId;
|
||||
QList<QString> m_fields;
|
||||
QList<QString> m_imageTypes;
|
||||
QList<QString> m_fields = {};
|
||||
QList<QString> m_imageTypes = {};
|
||||
QList<QString> m_sortBy = {};
|
||||
QList<QString> m_includeItemTypes = {};
|
||||
SortOrder m_sortOrder = Unspecified;
|
||||
bool m_recursive = false;
|
||||
|
||||
|
|
|
@ -169,6 +169,21 @@ private:
|
|||
QString m_errorString;
|
||||
};
|
||||
|
||||
class NameGuidPair : public JsonSerializable {
|
||||
Q_OBJECT
|
||||
public:
|
||||
Q_INVOKABLE NameGuidPair(QObject *parent = nullptr);
|
||||
Q_PROPERTY(QString name MEMBER m_name NOTIFY nameChanged)
|
||||
// Once again the Jellyfin id workaround
|
||||
Q_PROPERTY(QString jellyfinId MEMBER m_id NOTIFY jellyfinIdChanged)
|
||||
signals:
|
||||
void nameChanged(const QString &newName);
|
||||
void jellyfinIdChanged(const QString &newJellyfinId);
|
||||
private:
|
||||
QString m_name;
|
||||
QString m_id;
|
||||
};
|
||||
|
||||
class User : public RemoteData {
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
@ -333,10 +348,16 @@ public:
|
|||
Q_PROPERTY(bool isFolder READ isFolder WRITE setIsFolder NOTIFY isFolderChanged)
|
||||
Q_PROPERTY(QString type MEMBER m_type NOTIFY typeChanged)
|
||||
Q_PROPERTY(UserData *userData MEMBER m_userData NOTIFY userDataChanged)
|
||||
Q_PROPERTY(int recursiveItemCount READ recursiveItemCount WRITE setRecursiveItemCount NOTIFY recursiveItemCountChanged)
|
||||
Q_PROPERTY(int childCount READ childCount WRITE setChildCount NOTIFY childCountChanged)
|
||||
Q_PROPERTY(QString albumArtist MEMBER m_albumArtist NOTIFY albumArtistChanged)
|
||||
Q_PROPERTY(QList<NameGuidPair *> __list__albumArtists MEMBER __list__m_albumArtists NOTIFY albumArtistsChanged)
|
||||
Q_PROPERTY(QVariantList albumArtists MEMBER m_albumArtists NOTIFY albumArtistsChanged STORED false)
|
||||
Q_PROPERTY(QString seriesName MEMBER m_seriesName NOTIFY seriesNameChanged)
|
||||
Q_PROPERTY(QString seasonName MEMBER m_seasonName NOTIFY seasonNameChanged)
|
||||
Q_PROPERTY(QList<MediaStream *> __list__mediaStreams MEMBER __list__m_mediaStreams NOTIFY mediaStreamsChanged)
|
||||
Q_PROPERTY(QVariantList mediaStreams MEMBER m_mediaStreams NOTIFY mediaStreamsChanged STORED false)
|
||||
Q_PROPERTY(QStringList artists MEMBER m_artists NOTIFY artistsChanged)
|
||||
// Why is this a QJsonObject? Well, because I couldn't be bothered to implement the deserialisations of
|
||||
// a QHash at the moment.
|
||||
Q_PROPERTY(QJsonObject imageTags MEMBER m_imageTags NOTIFY imageTagsChanged)
|
||||
|
@ -374,6 +395,10 @@ public:
|
|||
void setIndexNumberEnd(int newIndexNumberEnd) { m_indexNumberEnd = std::optional<int>(newIndexNumberEnd); emit indexNumberEndChanged(newIndexNumberEnd); }
|
||||
bool isFolder() const { return m_isFolder.value_or(false); }
|
||||
void setIsFolder(bool newIsFolder) { m_isFolder = newIsFolder; emit isFolderChanged(newIsFolder); }
|
||||
int recursiveItemCount() const { return m_recursiveItemCount.value_or(-1); }
|
||||
void setRecursiveItemCount(int newRecursiveItemCount) { m_recursiveItemCount = newRecursiveItemCount; emit recursiveItemCountChanged(newRecursiveItemCount); }
|
||||
int childCount() const { return m_childCount.value_or(-1); }
|
||||
void setChildCount(int newChildCount) { m_childCount = newChildCount; emit childCountChanged(newChildCount); }
|
||||
|
||||
//QQmlListProperty<MediaStream> mediaStreams() { return toReadOnlyQmlListProperty<MediaStream>(m_mediaStreams); }
|
||||
//QList<QObject *> mediaStreams() { return *reinterpret_cast<QList<QObject *> *>(&m_mediaStreams); }
|
||||
|
@ -415,9 +440,14 @@ signals:
|
|||
void isFolderChanged(bool newIsFolder);
|
||||
void typeChanged(const QString &newType);
|
||||
void userDataChanged(UserData *newUserData);
|
||||
void recursiveItemCountChanged(int newRecursiveItemCount);
|
||||
void childCountChanged(int newChildCount);
|
||||
void albumArtistChanged(const QString &newAlbumArtist);
|
||||
void albumArtistsChanged(NameGuidPair *newAlbumArtists);
|
||||
void seriesNameChanged(const QString &newSeriesName);
|
||||
void seasonNameChanged(const QString &newSeasonName);
|
||||
void mediaStreamsChanged(/*const QList<MediaStream *> &newMediaStreams*/);
|
||||
void artistsChanged(const QStringList &newArtists);
|
||||
void imageTagsChanged();
|
||||
void imageBlurHashesChanged();
|
||||
|
||||
|
@ -463,10 +493,16 @@ protected:
|
|||
std::optional<bool> m_isFolder = std::nullopt;
|
||||
QString m_type;
|
||||
UserData *m_userData = nullptr;
|
||||
std::optional<int> m_recursiveItemCount = std::nullopt;
|
||||
std::optional<int> m_childCount = std::nullopt;
|
||||
QString m_albumArtist;
|
||||
QList<NameGuidPair *> __list__m_albumArtists;
|
||||
QVariantList m_albumArtists;
|
||||
QString m_seriesName;
|
||||
QString m_seasonName;
|
||||
QList<MediaStream *> __list__m_mediaStreams;
|
||||
QVariantList m_mediaStreams;
|
||||
QStringList m_artists;
|
||||
QJsonObject m_imageTags;
|
||||
QJsonObject m_imageBlurHashes;
|
||||
|
||||
|
|
|
@ -66,6 +66,9 @@ void ApiModel::load(LoadType type) {
|
|||
if (!m_imageTypes.empty()) {
|
||||
query.addQueryItem("ImageTypes", m_imageTypes.join(","));
|
||||
}
|
||||
if (!m_includeItemTypes.empty()) {
|
||||
query.addQueryItem("IncludeItemTypes", m_includeItemTypes.join(","));
|
||||
}
|
||||
if (!m_fields.empty()) {
|
||||
query.addQueryItem("Fields", m_fields.join(","));
|
||||
}
|
||||
|
@ -191,6 +194,7 @@ bool ApiModel::canFetchMore(const QModelIndex &parent) const {
|
|||
switch(m_status) {
|
||||
case Uninitialised:
|
||||
case Loading:
|
||||
case LoadingMore:
|
||||
return false;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -254,6 +254,8 @@ void RemoteData::reload() {
|
|||
});
|
||||
}
|
||||
|
||||
NameGuidPair::NameGuidPair(QObject *parent) : JsonSerializable (parent) {}
|
||||
|
||||
// User
|
||||
User::User(QObject *parent) : RemoteData (parent) {}
|
||||
|
||||
|
@ -351,6 +353,7 @@ void Item::onUserDataChanged(const QString &itemId, QSharedPointer<UserData> use
|
|||
|
||||
void registerSerializableJsonTypes(const char* URI) {
|
||||
qmlRegisterType<MediaStream>(URI, 1, 0, "MediaStream");
|
||||
qmlRegisterType<NameGuidPair>(URI, 1, 0, "NameGuidPair");
|
||||
qmlRegisterType<User>(URI, 1, 0, "User");
|
||||
qmlRegisterType<UserData>(URI, 1, 0, "UserData");
|
||||
qmlRegisterType<Item>(URI, 1, 0, "JellyfinItem");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue