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:
parent
60bc90c5fa
commit
caf72af999
19 changed files with 179 additions and 81 deletions
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue