Fix crash when SyncPlay shuffle mode is set to sorted twice

This commit is contained in:
fmarcac
2026-09-05 14:19:01 +02:00
parent c80f05fad1
commit e5bfe562bc
2 changed files with 34 additions and 1 deletions
@@ -157,7 +157,10 @@ namespace MediaBrowser.Controller.SyncPlay.Queue
/// </summary>
public void RestoreSortedPlaylist()
{
if (PlayingItemIndex != NoPlayingItemIndex)
// The shuffled playlist is only populated while the shuffle mode is active, so there is
// nothing to map back when the playlist is already sorted. Guarding on its contents keeps
// a redundant request for the sorted mode from indexing an empty list.
if (PlayingItemIndex != NoPlayingItemIndex && _shuffledPlaylist.Count > 0)
{
var playingItem = _shuffledPlaylist[PlayingItemIndex];
PlayingItemIndex = _sortedPlaylist.IndexOf(playingItem);
@@ -142,6 +142,36 @@ public class PlayQueueManagerTests
Assert.Equal(Guid.Empty, queue.GetPlayingItemPlaylistId());
}
[Fact]
public void SetShuffleMode_SortedWhileAlreadySorted_KeepsPlayingItem()
{
var queue = CreateQueue(3);
queue.SetPlayingItemByIndex(1);
var expectedItemId = queue.GetPlayingItemId();
queue.SetShuffleMode(GroupShuffleMode.Sorted);
Assert.Equal(GroupShuffleMode.Sorted, queue.ShuffleMode);
Assert.Equal(1, queue.PlayingItemIndex);
Assert.Equal(expectedItemId, queue.GetPlayingItemId());
}
[Fact]
public void SetShuffleMode_SortedTwiceAfterShuffle_KeepsPlayingItem()
{
var queue = CreateQueue(5);
queue.SetPlayingItemByIndex(2);
var expectedItemId = queue.GetPlayingItemId();
queue.SetShuffleMode(GroupShuffleMode.Shuffle);
queue.SetShuffleMode(GroupShuffleMode.Sorted);
queue.SetShuffleMode(GroupShuffleMode.Sorted);
Assert.Equal(GroupShuffleMode.Sorted, queue.ShuffleMode);
Assert.Equal(5, queue.GetPlaylist().Count);
Assert.Equal(expectedItemId, queue.GetPlayingItemId());
}
[Fact]
public void SetPlayingItemByIndex_InBounds_SetsPlayingItem()
{