1
0
Fork 0
mirror of https://github.com/HenkKalkwater/harbour-sailfin.git synced 2025-09-06 10:32:44 +00:00

WIP: Slowly bringing back viewmodels

This commit is contained in:
Chris Josten 2021-03-29 23:48:16 +02:00
parent 9abee12658
commit 228f81984b
17 changed files with 292 additions and 96 deletions

View file

@ -21,11 +21,10 @@
namespace Jellyfin {
namespace ViewModel {
Item::Item(QObject *parent)
: Item(nullptr, parent){}
Item::Item(QObject *parent, QSharedPointer<Model::Item> data)
: QObject(parent), m_data(data){
Item::Item(QSharedPointer<Model::Item> data, QObject *parent)
: QObject(parent), m_data(data){}
}
void Item::setData(QSharedPointer<Model::Item> newData) {
Model::Item oldData = *m_data.data();
@ -36,7 +35,8 @@ void Item::setData(QSharedPointer<Model::Item> newData) {
// ItemLoader
ItemLoader::ItemLoader(QObject *parent)
: BaseClass(Jellyfin::Loader::HTTP::GetItemLoader(), parent) {
: BaseClass(new Jellyfin::Loader::HTTP::GetItemLoader(), parent) {
connect(this, &LoaderBase::apiClientChanged, this, &ItemLoader::onApiClientChanged);
}
void ItemLoader::onApiClientChanged(ApiClient *newApiClient) {
@ -54,7 +54,9 @@ void ItemLoader::setUserId(const QString &newUserId) {
}
bool ItemLoader::canReload() const {
return BaseClass::canReload() && !m_parameters.itemId().isEmpty();
return BaseClass::canReload()
&& !m_parameters.itemId().isEmpty()
&& !m_parameters.userId().isEmpty();
}
}

View file

@ -18,6 +18,9 @@
*/
#include "JellyfinQt/viewmodel/itemmodel.h"
#include "JellyfinQt/loader/http/getlatestmedia.h"
#include "JellyfinQt/loader/http/getitemsbyuserid.h"
#define JF_CASE(roleName) case roleName: \
try { \
return QVariant(item.roleName()); \
@ -30,37 +33,13 @@ namespace Jellyfin {
namespace ViewModel {
UserViewsLoader::UserViewsLoader(QObject *parent)
: UserViewsLoaderBase(new Jellyfin::Loader::HTTP::GetUserViewsLoader(), parent) {
connect(this, &BaseModelLoader::apiClientChanged, this, &UserViewsLoader::apiClientChanged);
}
: UserViewsLoaderBase(new Jellyfin::Loader::HTTP::GetUserViewsLoader(), parent) { }
void UserViewsLoader::apiClientChanged(ApiClient *newApiClient) {
if (m_apiClient != nullptr) disconnect(m_apiClient, &ApiClient::userIdChanged, this, &UserViewsLoader::userIdChanged);
if (newApiClient != nullptr) {
connect(newApiClient, &ApiClient::userIdChanged, this, &UserViewsLoader::userIdChanged);
if (!newApiClient->userId().isNull()) {
m_parameters.setUserId(newApiClient->userId());
}
}
}
LatestMediaLoader::LatestMediaLoader(QObject *parent)
: LatestMediaBase(new Jellyfin::Loader::HTTP::GetLatestMediaLoader(), parent){ }
void UserViewsLoader::userIdChanged(const QString &newUserId) {
m_parameters.setUserId(newUserId);
autoReloadIfNeeded();
}
void UserItemsLoader::apiClientChanged(ApiClient *newApiClient) {
if (m_apiClient != nullptr) disconnect(m_apiClient, &ApiClient::userIdChanged, this, &UserItemsLoader::userIdChanged);
if (newApiClient != nullptr) connect(newApiClient, &ApiClient::userIdChanged, this, &UserItemsLoader::userIdChanged);
}
void UserItemsLoader::userIdChanged(const QString &newUserId) {
m_parameters.setUserId(newUserId);
autoReloadIfNeeded();
}
bool UserItemsLoader::canReload() const {
return BaseModelLoader::canReload() && !m_parameters.userId().isNull();
}
UserItemsLoader::UserItemsLoader(QObject *parent)
: UserItemsLoaderBase(new Jellyfin::Loader::HTTP::GetItemsByUserIdLoader(), parent) {}
ItemModel::ItemModel(QObject *parent)
: ApiModel<Model::Item>(parent) { }
@ -81,6 +60,8 @@ QVariant ItemModel::data(const QModelIndex &index, int role) const {
JF_CASE(dateCreated)
JF_CASE(dateLastMediaAdded)
JF_CASE(extraType)
// Handpicked, important ones
JF_CASE(imageTags)
default:
return QVariant();
}