1
0
Fork 0
mirror of https://github.com/HenkKalkwater/harbour-sailfin.git synced 2025-09-05 18:22:46 +00:00

Fix a few bugs and unimplemented features

* Show the now playing cover when playing an item, otherwise show the
  collection cover.
* ItemModelLoaders now correctly expose list properties of non-built-in
  Qt objects
* toString is now implemented for lists, fixing some query
  construction code.
* PlaybackManager now clears the playlist when playing a single item to
  prevent weird behaviour.
* The covers are slightly updated.
This commit is contained in:
Henk Kalkwater 2021-09-09 05:57:41 +02:00 committed by Henk Kalkwater
parent 60bc90c5fa
commit caf72af999
No known key found for this signature in database
GPG key ID: A69C050E9FD9FF6A
19 changed files with 179 additions and 81 deletions

View file

@ -438,7 +438,7 @@ void ApiClient::generateDeviceProfile() {
clientCapabilities->setIconUrl("https://chris.netsoj.nl/static/img/logo.png");
clientCapabilities->setSupportsPersistentIdentifier(true);
clientCapabilities->setSupportsSync(false);
clientCapabilities->setSupportsMediaControl(false);
clientCapabilities->setSupportsMediaControl(true);
clientCapabilities->setSupportsContentUploading(false);
d->clientCapabilities = clientCapabilities;

View file

@ -23,6 +23,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#include "JellyfinQt/dto/useritemdatadto.h"
#include "JellyfinQt/dto/userdto.h"
Q_LOGGING_CATEGORY(jellyfinApiModel, "jellyfin.apimodel")
namespace Jellyfin {
// BaseApiModel
@ -46,7 +48,7 @@ void BaseModelLoader::componentComplete() {
void BaseModelLoader::autoReloadIfNeeded() {
if (m_autoReload && canReload()) {
qDebug() << "reloading due to 'autoReloadIfNeeded()'";
qCDebug(jellyfinApiModel) << "reloading due to 'autoReloadIfNeeded()'";
emit reloadWanted();
}
}
@ -57,14 +59,14 @@ void BaseModelLoader::setApiClient(ApiClient *newApiClient) {
if (changed) {
emit apiClientChanged(newApiClient);
}
autoReloadIfNeeded();
}
void BaseModelLoader::setLimit(int newLimit) {
int oldLimit = this->m_limit;
m_limit = newLimit;
if (oldLimit != newLimit) {
emit limitChanged(this->m_limit);
}
m_explicitLimitSet = newLimit >= 0;
qCDebug(jellyfinApiModel) << "Limit explicitly set to " << newLimit;
this->m_limit = newLimit;
emit limitChanged(newLimit);
}
void BaseModelLoader::setAutoReload(bool newAutoReload) {
@ -90,7 +92,7 @@ bool BaseModelLoader::canReload() const {
}
void BaseApiModel::reload() {
qWarning() << " BaseApiModel slot called instead of overloaded method";
qCWarning(jellyfinApiModel) << " BaseApiModel slot called instead of overloaded method";
}
// Parameters injectors and result extractors

View file

@ -75,6 +75,7 @@ void JellyfinPlugin::registerTypes(const char *uri) {
qmlRegisterType<ViewModel::ResumeItemsLoader>(uri, 1, 0, "ResumeItemsLoader");
qmlRegisterType<ViewModel::ShowSeasonsLoader>(uri, 1, 0, "ShowSeasonsLoader");
qmlRegisterType<ViewModel::ShowEpisodesLoader>(uri, 1, 0, "ShowEpisodesLoader");
qmlRegisterType<ViewModel::NextUpLoader>(uri, 1, 0, "NextUpLoader");
qmlRegisterType<ViewModel::PublicUsersLoader>(uri, 1, 0, "PublicUsersLoader");
// Enumerations

View file

@ -144,6 +144,14 @@ void Playlist::appendToList(ViewModel::ItemModel &model) {
reshuffle();
}
void Playlist::appendToList(QSharedPointer<Model::Item> item) {
int start = m_list.size();
emit beforeItemsAddedToList(start, 1);
m_list.append(item);
emit itemsAddedToList();
reshuffle();
}
void Playlist::reshuffle() {
if (m_shuffler->canShuffleInAdvance()) {
m_shuffler->shuffleInAdvance();

View file

@ -54,6 +54,9 @@ ShowSeasonsLoader::ShowSeasonsLoader(QObject *parent)
ShowEpisodesLoader::ShowEpisodesLoader(QObject *parent)
: ShowEpisodesLoaderBase(new Jellyfin::Loader::HTTP::GetEpisodesLoader(), parent) {}
NextUpLoader::NextUpLoader(QObject *parent)
: NextUpLoaderBase(new Jellyfin::Loader::HTTP::GetNextUpLoader(), parent) {}
ItemModel::ItemModel(QObject *parent)
: ApiModel<Model::Item>(parent) { }
@ -86,6 +89,7 @@ QVariant ItemModel::data(const QModelIndex &index, int role) const {
JF_CASE(artists)
case RoleNames::isFolder:
return QVariant(item->isFolder().value_or(false));
JF_CASE(overview)
case RoleNames::parentIndexNumber:
return QVariant(item->parentIndexNumber().value_or(1));
// UserData

View file

@ -156,7 +156,9 @@ void PlaybackManager::mediaPlayerMediaStatusChanged(QMediaPlayer::MediaStatus ne
m_mediaPlayer->setPosition(m_resumePosition / MS_TICK_FACTOR);
}
} else if (newStatus == QMediaPlayer::EndOfMedia) {
next();
if (m_queue->hasNext() && m_queue->totalSize() > 1) {
next();
}
}
}
@ -178,6 +180,8 @@ void PlaybackManager::updatePlaybackInfo() {
}
void PlaybackManager::playItem(Item *item) {
m_queue->clearList();
m_queue->appendToList(item->data());
setItem(item->data());
emit hasNextChanged(m_queue->hasNext());
emit hasPreviousChanged(m_queue->hasPrevious());