From bb1e3ea21d6239d48f582d9c128e57acd03a8f3b Mon Sep 17 00:00:00 2001 From: Henk Kalkwater Date: Tue, 17 Aug 2021 16:43:17 +0200 Subject: [PATCH] Repair broken userdata. The UserData of an item was not displaying, this should re-add it. --- core/include/JellyfinQt/jellyfin.h | 1 + core/include/JellyfinQt/model/item.h | 1 + core/include/JellyfinQt/viewmodel/item.h | 2 +- core/include/JellyfinQt/viewmodel/itemmodel.h | 50 ++++++++---------- core/src/jellyfin.cpp | 1 + core/src/viewmodel/item.cpp | 11 +++- core/src/viewmodel/itemmodel.cpp | 23 ++++++++ core/src/viewmodel/userdata.cpp | 13 +++-- qtquick/qml/pages/DetailPage.qml | 3 ++ qtquick/test.rcc | Bin 0 -> 15619 bytes .../qml/pages/itemdetails/BaseDetailPage.qml | 1 + sailfish/qml/pages/itemdetails/SeasonPage.qml | 8 +-- sailfish/qml/pages/itemdetails/VideoPage.qml | 6 +-- 13 files changed, 79 insertions(+), 41 deletions(-) create mode 100644 qtquick/test.rcc diff --git a/core/include/JellyfinQt/jellyfin.h b/core/include/JellyfinQt/jellyfin.h index 5bc28d0..eb12149 100644 --- a/core/include/JellyfinQt/jellyfin.h +++ b/core/include/JellyfinQt/jellyfin.h @@ -36,6 +36,7 @@ #include "viewmodel/loader.h" #include "viewmodel/modelstatus.h" #include "viewmodel/playbackmanager.h" +#include "viewmodel/userdata.h" namespace Jellyfin { diff --git a/core/include/JellyfinQt/model/item.h b/core/include/JellyfinQt/model/item.h index 5f3ba50..9206877 100644 --- a/core/include/JellyfinQt/model/item.h +++ b/core/include/JellyfinQt/model/item.h @@ -37,6 +37,7 @@ class Item : public QObject, public DTO::BaseItemDto { Q_OBJECT public: using UserDataChangedCallback = std::function; + using BaseItemDto::userData; /** * @brief Constructor that creates an empty item. */ diff --git a/core/include/JellyfinQt/viewmodel/item.h b/core/include/JellyfinQt/viewmodel/item.h index 9fabf39..09ca93a 100644 --- a/core/include/JellyfinQt/viewmodel/item.h +++ b/core/include/JellyfinQt/viewmodel/item.h @@ -100,7 +100,7 @@ public: Q_PROPERTY(QString type READ type NOTIFY typeChanged) Q_PROPERTY(QString parentBackdropItemId READ parentBackdropItemId NOTIFY parentBackdropItemIdChanged) Q_PROPERTY(QStringList parentBackdropImageTags READ parentBackdropImageTags NOTIFY parentBackdropImageTagsChanged) - Q_PROPERTY(UserData *userData READ userData NOTIFY userDataChanged) + Q_PROPERTY(Jellyfin::ViewModel::UserData *userData READ userData NOTIFY userDataChanged) Q_PROPERTY(int recursiveItemCount READ recursiveItemCount NOTIFY recursiveItemCountChanged) Q_PROPERTY(int childCount READ childCount NOTIFY childCountChanged) Q_PROPERTY(QString albumArtist READ albumArtist NOTIFY albumArtistChanged) diff --git a/core/include/JellyfinQt/viewmodel/itemmodel.h b/core/include/JellyfinQt/viewmodel/itemmodel.h index 2d8ba68..65fc79a 100644 --- a/core/include/JellyfinQt/viewmodel/itemmodel.h +++ b/core/include/JellyfinQt/viewmodel/itemmodel.h @@ -28,6 +28,7 @@ #include "../loader/http/getuserviews.h" #include "../loader/requesttypes.h" #include "../model/item.h" +#include "../viewmodel/item.h" #include "../apimodel.h" #include "modelstatus.h" #include "propertyhelper.h" @@ -268,6 +269,16 @@ public: artists, isFolder, parentIndexNumber, + userDataRating, + userDataPlayedPercentage, + userDataUnplayedItemCount, + userDataPlaybackPositionTicks, + userDataPlayCount, + userDataFavorite, + userDataLikes, + userDataLastPlayedDate, + userDataPlayed, + userDataKey, jellyfinExtendModelAfterHere = Qt::UserRole + 300 // Should be enough for now }; @@ -297,41 +308,22 @@ public: JFRN(artists), JFRN(isFolder), JFRN(parentIndexNumber), + JFRN(userDataRating), + JFRN(userDataPlayedPercentage), + JFRN(userDataUnplayedItemCount), + JFRN(userDataPlaybackPositionTicks), + JFRN(userDataPlayCount), + JFRN(userDataFavorite), + JFRN(userDataLikes), + JFRN(userDataLastPlayedDate), + JFRN(userDataPlayed), + JFRN(userDataKey), }; } QVariant data(const QModelIndex &index, int role) const override; QSharedPointer itemAt(int index); }; -/*class UserItemModel : public ItemModel { -public: - explicit UserItemModel (QObject *parent = nullptr); -}; - -class UserItemResumeModel : public ItemModel { -public: - explicit UserItemResumeModel (QObject *parent = nullptr); -}; - -class UserItemLatestModel : public ItemModel { -public: - explicit UserItemLatestModel (QObject *parent = nullptr); -}; - -class ShowNextUpModel : public ItemModel { -public: - explicit ShowNextUpModel (QObject *parent = nullptr); -}; - -class ShowSeasonsModel : public ItemModel { -public: - explicit ShowSeasonsModel (QObject *parent = nullptr); -}; - -class ShowEpisodesModel : public ItemModel { -public: - explicit ShowEpisodesModel (QObject *parent = nullptr); -};*/ #undef JFRN } // NS Jellyfin diff --git a/core/src/jellyfin.cpp b/core/src/jellyfin.cpp index ab222cc..95852b4 100644 --- a/core/src/jellyfin.cpp +++ b/core/src/jellyfin.cpp @@ -26,6 +26,7 @@ void registerTypes(const char *uri) { qmlRegisterUncreatableType(uri, 1, 0, "Item", "Acquire one via ItemLoader or exposed properties"); qmlRegisterUncreatableType(uri, 1, 0, "EventBus", "Obtain one via your ApiClient"); qmlRegisterUncreatableType(uri, 1, 0, "WebSocket", "Obtain one via your ApiClient"); + qmlRegisterUncreatableType(uri, 1, 0, "UserData", "Obtain one via an Item"); // AbstractItemModels qmlRegisterUncreatableType(uri, 1, 0, "BaseApiModel", "Please use one of its subclasses"); diff --git a/core/src/viewmodel/item.cpp b/core/src/viewmodel/item.cpp index c82cc46..cd8b140 100644 --- a/core/src/viewmodel/item.cpp +++ b/core/src/viewmodel/item.cpp @@ -27,16 +27,21 @@ Item::Item(QObject *parent, QSharedPointer data) m_data(data), m_userData(new UserData(this)){ connect(m_data.data(), &Model::Item::userDataChanged, this, &Item::onUserDataChanged); + m_userData->setData(data->userData()); } void Item::setData(QSharedPointer newData) { if (!m_data.isNull()) { disconnect(m_data.data(), &Model::Item::userDataChanged, this, &Item::onUserDataChanged); } + m_data = newData; + if (!m_data.isNull()) { connect(m_data.data(), &Model::Item::userDataChanged, this, &Item::onUserDataChanged); + setUserData(m_data->userData()); } + emit userDataChanged(m_userData); } void Item::setUserData(DTO::UserItemDataDto &newData) { @@ -44,7 +49,11 @@ void Item::setUserData(DTO::UserItemDataDto &newData) { } void Item::setUserData(QSharedPointer newData) { - m_userData->setData(newData); + if (m_data.isNull() || m_data->userData().isNull()) { + m_userData->setData(QSharedPointer::create()); + } else { + m_userData->setData(newData); + } emit userDataChanged(m_userData); } diff --git a/core/src/viewmodel/itemmodel.cpp b/core/src/viewmodel/itemmodel.cpp index fba60ba..ba0b7d1 100644 --- a/core/src/viewmodel/itemmodel.cpp +++ b/core/src/viewmodel/itemmodel.cpp @@ -24,6 +24,8 @@ #include "JellyfinQt/loader/http/getresumeitems.h" #include "JellyfinQt/loader/http/getseasons.h" +#include "JellyfinQt/viewmodel/userdata.h" + #define JF_CASE(roleName) case roleName: \ try { \ return QVariant(item->roleName()); \ @@ -87,6 +89,27 @@ QVariant ItemModel::data(const QModelIndex &index, int role) const { return QVariant(item->isFolder().value_or(false)); case RoleNames::parentIndexNumber: return QVariant(item->parentIndexNumber().value_or(1)); + // UserData + case RoleNames::userDataRating: + return QVariant(item->userData()->rating().value_or(0.0)); + case RoleNames::userDataPlayedPercentage: + return QVariant(item->userData()->playedPercentage().value_or(0.0)); + case RoleNames::userDataUnplayedItemCount: + return QVariant(item->userData()->unplayedItemCount().value_or(0)); + case RoleNames::userDataPlaybackPositionTicks: + return QVariant(item->userData()->playbackPositionTicks()); + case RoleNames::userDataPlayCount: + return QVariant(item->userData()->playCount()); + case RoleNames::userDataFavorite: + return QVariant(item->userData()->isFavorite()); + case RoleNames::userDataLikes: + return QVariant(item->userData()->likes().value_or(false)); + case RoleNames::userDataLastPlayedDate: + return QVariant(item->userData()->lastPlayedDate()); + case RoleNames::userDataPlayed: + return QVariant(item->userData()->played()); + case RoleNames::userDataKey: + return QVariant(item->userData()->key()); default: return QVariant(); } diff --git a/core/src/viewmodel/userdata.cpp b/core/src/viewmodel/userdata.cpp index 6c5f5a7..d2b26e1 100644 --- a/core/src/viewmodel/userdata.cpp +++ b/core/src/viewmodel/userdata.cpp @@ -22,17 +22,24 @@ namespace Jellyfin { namespace ViewModel { UserData::UserData(QObject *parent) - : QObject(parent), - m_data(QSharedPointer::create()) { + : UserData(QSharedPointer::create(), parent) { + } UserData::UserData(QSharedPointer data, QObject *parent) : QObject(parent), m_data(data) { + if (m_data.isNull()) { + m_data = QSharedPointer::create(); + } } void UserData::setData(QSharedPointer data) { - m_data = data; + if (data.isNull()) { + m_data = QSharedPointer::create(); + } else { + m_data = data; + } } } // NS ViewModel diff --git a/qtquick/qml/pages/DetailPage.qml b/qtquick/qml/pages/DetailPage.qml index a44685a..35bf1a4 100644 --- a/qtquick/qml/pages/DetailPage.qml +++ b/qtquick/qml/pages/DetailPage.qml @@ -51,6 +51,9 @@ Page { height: parent.height / 3 * 2 anchors.bottom: parent.bottom model: tracks + header: Label { + text: "Play count: %1".arg(jellyfinItem.userData.playCount) + } delegate: ItemDelegate { icon.source: ApiClient.baseUrl + "/Items/" + model.jellyfinId + "/Images/Primary?tag=" + model.tag text: model.name diff --git a/qtquick/test.rcc b/qtquick/test.rcc new file mode 100644 index 0000000000000000000000000000000000000000..01996edbea31a39317a360ff40959c969b901c42 GIT binary patch literal 15619 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 literal 0 HcmV?d00001 diff --git a/sailfish/qml/pages/itemdetails/BaseDetailPage.qml b/sailfish/qml/pages/itemdetails/BaseDetailPage.qml index 36b2f01..0d3c3c5 100644 --- a/sailfish/qml/pages/itemdetails/BaseDetailPage.qml +++ b/sailfish/qml/pages/itemdetails/BaseDetailPage.qml @@ -34,6 +34,7 @@ Page { id: pageRoot property string itemId: "" property alias itemData: jItemLoader.data + property alias itemLoader: jItemLoader property bool _loading: jItemLoader.status === J.ItemLoader.Loading readonly property bool hasLogo: (typeof itemData.imageTags !== "undefined") && (typeof itemData.imageTags["Logo"] !== "undefined") property string _chosenBackdropImage: "" diff --git a/sailfish/qml/pages/itemdetails/SeasonPage.qml b/sailfish/qml/pages/itemdetails/SeasonPage.qml index 4b04b61..b9b7baf 100644 --- a/sailfish/qml/pages/itemdetails/SeasonPage.qml +++ b/sailfish/qml/pages/itemdetails/SeasonPage.qml @@ -79,7 +79,7 @@ BaseDetailPage { shimColor: Theme.overlayBackgroundColor shimOpacity: Theme.opacityOverlay //width: model.userData.PlayedPercentage * parent.width / 100 - visible: episodeProgress.width > 0 || model.userData.played || model.userData.isFavorite // It doesn't look nice when it's visible on every image + visible: episodeProgress.width > 0 || model.userDataPlayed || model.userDataFavorite // It doesn't look nice when it's visible on every image } Rectangle { @@ -89,7 +89,7 @@ BaseDetailPage { bottom: parent.bottom } height: Theme.paddingMedium - width: model.userData.playedPercentage * parent.width / 100 + width: model.userDataPlayedPercentage * parent.width / 100 color: Theme.highlightColor } Row { @@ -103,12 +103,12 @@ BaseDetailPage { Icon { source: "image://theme/icon-s-checkmark" - visible: model.userData.played + visible: model.userDataPlayed } Icon { source: "image://theme/icon-s-favorite" - visible: model.userData.isFavorite + visible: model.userDataFavorite } } } diff --git a/sailfish/qml/pages/itemdetails/VideoPage.qml b/sailfish/qml/pages/itemdetails/VideoPage.qml index 1da8c9d..a45faab 100644 --- a/sailfish/qml/pages/itemdetails/VideoPage.qml +++ b/sailfish/qml/pages/itemdetails/VideoPage.qml @@ -33,7 +33,7 @@ BaseDetailPage { property alias subtitle: pageHeader.description default property alias _data: content.data property real _playbackProsition: itemData.userData.playbackPositionTicks - readonly property bool _userdataReady: itemData.status === J.ItemLoader.Ready && itemData.userData !== null + readonly property bool _userdataReady: itemLoader.status === J.ItemLoader.Ready && itemData.userData !== null SilicaFlickable { anchors.fill: parent contentHeight: content.height + Theme.paddingLarge @@ -60,7 +60,7 @@ BaseDetailPage { imageBlurhash: itemData.imageBlurHashes["Primary"][itemData.imageTags["Primary"]] Binding on favourited { when: _userdataReady - value: itemData.userData.isFavorite + value: itemData.userData.favorite } Binding on playProgress { when: _userdataReady @@ -82,7 +82,7 @@ BaseDetailPage { } Connections { - target: itemData + target: itemLoader onStatusChanged: { if (status === J.ItemLoader.Ready) { console.log(itemData.mediaStreams)