From 433169626bf100a16d7a4ed1459762d8989db993 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 23 Nov 2021 18:01:58 +0400 Subject: [PATCH] Fix restarting shuffled playlist. --- .../media/player/media_player_instance.cpp | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/media/player/media_player_instance.cpp b/Telegram/SourceFiles/media/player/media_player_instance.cpp index 2028f0201..ec06d79d9 100644 --- a/Telegram/SourceFiles/media/player/media_player_instance.cpp +++ b/Telegram/SourceFiles/media/player/media_player_instance.cpp @@ -796,8 +796,27 @@ void Instance::validateShuffleData(not_null data) { raw->nonPlayedIds.clear(); raw->playedIds.clear(); raw->indexInPlayedIds = 0; - } else if (raw->allLoaded || raw->nextSliceLifetime) { + } else if (raw->nextSliceLifetime) { return; + } else if (raw->allLoaded) { + const auto universal = computeCurrentUniversalId(data); + if (!universal + || (raw->indexInPlayedIds < raw->playedIds.size() + ? (raw->playedIds[raw->indexInPlayedIds] == universal) + : ranges::contains(raw->nonPlayedIds, universal))) { + return; + } + // We started playing some track not from the tracks that are left. + // Start the whole playlist thing once again. + raw->playedIds.clear(); + raw->indexInPlayedIds = 0; + if (ranges::contains(raw->playlist, universal)) { + raw->nonPlayedIds = raw->playlist; + } else { + raw->allLoaded = false; + raw->playlist.clear(); + raw->nonPlayedIds.clear(); + } } if (raw->scheduled) { const auto count = data->playlistSlice