From 7302e4ebbd49f8c43268023399f2eaa4e24e701d Mon Sep 17 00:00:00 2001 From: Siiiiinth <60766886+Siiiiinth@users.noreply.github.com> Date: Sun, 1 Feb 2026 13:08:27 +0100 Subject: [PATCH] move current track to front on shuffle --- backend/playbackengine.go | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/backend/playbackengine.go b/backend/playbackengine.go index adf9bd2..1ed7410 100644 --- a/backend/playbackengine.go +++ b/backend/playbackengine.go @@ -226,6 +226,13 @@ func (p *playbackEngine) getPlayQueue() []mediaprovider.MediaItem { return p.playQueue } +func (p *playbackEngine) getActivePlayQueue() []mediaprovider.MediaItem { + if p.shuffle { + return p.shuffledPlayQueue + } + return p.playQueue +} + func (p *playbackEngine) getPlayQueueLength() int { return len(p.getPlayQueue()) } @@ -256,6 +263,10 @@ func (p *playbackEngine) GetPlayQueueDeepCopy() []mediaprovider.MediaItem { return deepCopyMediaItemSlice(p.getPlayQueue()) } +func (p *playbackEngine) GetActivePlayQueueDeepCopy() []mediaprovider.MediaItem { + return deepCopyMediaItemSlice(p.getActivePlayQueue()) +} + // ======================== END PLAY QUEUE FUNCS ============================= func (p *playbackEngine) PlayTrackAt(idx int) error { @@ -329,9 +340,8 @@ func (p *playbackEngine) SetShuffle(shuffle bool) { rand.Shuffle(len(shuffledQueue), func(i, j int) { shuffledQueue[i], shuffledQueue[j] = shuffledQueue[j], shuffledQueue[i] }) - // TODO_SHUFFLE: move now playing track to beginning of queue - newNowPlayingIdx = p.GetNewNowPlayingIdx(shuffledQueue) - p.shuffledPlayQueue = shuffledQueue + p.shuffledPlayQueue = sharedutil.ReorderItems(shuffledQueue, []int{p.GetNewNowPlayingIdx(shuffledQueue)}, 0) + newNowPlayingIdx = 0 } else { newNowPlayingIdx = p.GetNewNowPlayingIdx(p.playQueue) } @@ -551,8 +561,11 @@ func (p *playbackEngine) UpdatePlayQueue(items []mediaprovider.MediaItem) error } } } - - p.setPlayQueue(newQueue) + if p.shuffle { + p.setShuffledPlayQueue(newQueue) + } else { + p.setPlayQueue(newQueue) + } if p.nowPlayingIdx >= 0 && newNowPlayingIdx == -1 { return p.Stop() }