diff --git a/core/include/JellyfinQt/viewmodel/playbackmanager.h b/core/include/JellyfinQt/viewmodel/playbackmanager.h index 24d6bc4..4744dcd 100644 --- a/core/include/JellyfinQt/viewmodel/playbackmanager.h +++ b/core/include/JellyfinQt/viewmodel/playbackmanager.h @@ -148,6 +148,11 @@ public slots: */ void playItem(Item *item); void playItemInList(ItemModel *itemList, int index); + /** + * @brief skipToItemIndex Skips to an item in the current playlist + * @param index The index to skip to + */ + void skipToItemIndex(int index); void play() { m_mediaPlayer->play(); } void pause() { m_mediaPlayer->pause(); } void seek(qint64 pos) { m_mediaPlayer->setPosition(pos); } diff --git a/core/src/model/playlist.cpp b/core/src/model/playlist.cpp index da4f755..6c37f13 100644 --- a/core/src/model/playlist.cpp +++ b/core/src/model/playlist.cpp @@ -165,6 +165,7 @@ void Playlist::play(int index) { m_nextItem.clear(); } } + m_currentItem = m_list[m_shuffler->currentItem()]; emit currentItemChanged(); } diff --git a/core/src/viewmodel/playbackmanager.cpp b/core/src/viewmodel/playbackmanager.cpp index 0b84311..ed41000 100644 --- a/core/src/viewmodel/playbackmanager.cpp +++ b/core/src/viewmodel/playbackmanager.cpp @@ -192,6 +192,20 @@ void PlaybackManager::playItemInList(ItemModel *playlist, int index) { setItem(playlist->itemAt(index)); } +void PlaybackManager::skipToItemIndex(int index) { + if (index < m_queue->queueSize()) { + // Skip until we hit the right number in the queue + index++; + while(index != 0) { + m_queue->next(); + index--; + } + } else { + m_queue->play(index); + } + setItem(m_queue->currentItem()); +} + void PlaybackManager::next() { m_mediaPlayer->stop(); m_mediaPlayer->setMedia(QMediaContent()); diff --git a/sailfish/qml/components/PlayQueue.qml b/sailfish/qml/components/PlayQueue.qml index b394f5f..79263bb 100644 --- a/sailfish/qml/components/PlayQueue.qml +++ b/sailfish/qml/components/PlayQueue.qml @@ -7,6 +7,7 @@ import "music" SilicaListView { //header: PageHeader { title: qsTr("Play queue") } + property var playbackManager section.property: "section" section.delegate: SectionHeader { text: { @@ -29,6 +30,7 @@ SilicaListView { indexNumber: index + 1 duration: model.runTimeTicks playing: model.playing + onClicked: playbackManager.skipToItemIndex(model.index) } clip: true } diff --git a/sailfish/qml/components/PlaybackBar.qml b/sailfish/qml/components/PlaybackBar.qml index 76ba022..85c5a01 100644 --- a/sailfish/qml/components/PlaybackBar.qml +++ b/sailfish/qml/components/PlaybackBar.qml @@ -98,6 +98,12 @@ PanelBackground { value: manager.queue //currentIndex: manager.queueIndex } + Binding { + when: queueLoader.item !== null + target: queueLoader.item + property: "playbackManager" + value: manager + } } Column {