From d24b65a8a74fa02b0d16d72ae938166be120592a Mon Sep 17 00:00:00 2001 From: SKProCH Date: Wed, 21 Aug 2024 00:08:07 +0300 Subject: [PATCH] Fixes queue items correlation when playable track identifier differs from source LavalinkTrack --- src/Lavalink4NET/Players/LavalinkPlayer.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Lavalink4NET/Players/LavalinkPlayer.cs b/src/Lavalink4NET/Players/LavalinkPlayer.cs index ea4c63d5..c27bd503 100644 --- a/src/Lavalink4NET/Players/LavalinkPlayer.cs +++ b/src/Lavalink4NET/Players/LavalinkPlayer.cs @@ -39,6 +39,7 @@ public class LavalinkPlayer : ILavalinkPlayer, ILavalinkPlayerListener private volatile ITrackQueueItem? _currentItem; private volatile ITrackQueueItem? _replacedItem; private volatile ITrackQueueItem? _nextItem; + private volatile string? _nextOverridenPlayableItemIdentifier; private UpDownCounter? _previousStateCounter; private string? _previousVoiceServer; @@ -218,9 +219,10 @@ ValueTask ILavalinkPlayerListener.NotifyTrackStartedAsync(LavalinkTrack track, C ArgumentNullException.ThrowIfNull(track); var nextTrack = Interlocked.Exchange(ref _nextItem, null) ?? CurrentItem; - Debug.Assert(track.Identifier == nextTrack?.Identifier); + var nextTrackIdentifier = Interlocked.Exchange(ref _nextOverridenPlayableItemIdentifier, null) ?? nextTrack?.Identifier; + Debug.Assert(track.Identifier == nextTrackIdentifier); - CurrentItem = track.Identifier == nextTrack?.Identifier + CurrentItem = track.Identifier == nextTrackIdentifier ? nextTrack : new TrackQueueItem(new TrackReference(track)); @@ -265,7 +267,7 @@ public virtual async ValueTask PlayAsync(ITrackQueueItem trackQueueItem, TrackPl .GetPlayableTrackAsync(cancellationToken) .ConfigureAwait(false); - updateProperties.TrackData = playableTrack.ToString(); + updateProperties.TrackData = _nextOverridenPlayableItemIdentifier = playableTrack.ToString(); } else {