Fix crash when SyncPlay shuffle mode is set to sorted twice
This commit is contained in:
@@ -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()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user