diff --git a/RedBookPlayer.Models/Hardware/Player.cs b/RedBookPlayer.Models/Hardware/Player.cs index 360ace7..712c2aa 100644 --- a/RedBookPlayer.Models/Hardware/Player.cs +++ b/RedBookPlayer.Models/Hardware/Player.cs @@ -307,6 +307,11 @@ namespace RedBookPlayer.Models.Hardware /// private List> _trackPlaybackOrder; + /// + /// Current track in playback order list + /// + private int _currentTrackInOrder; + /// /// Last volume for mute toggling /// @@ -355,6 +360,7 @@ namespace RedBookPlayer.Models.Hardware } _trackPlaybackOrder = new List>(); + _currentTrackInOrder = 0; PropertyChanged += HandlePlaybackModes; } @@ -447,6 +453,26 @@ namespace RedBookPlayer.Models.Hardware _trackPlaybackOrder.AddRange(availableTracks.Select(t => new KeyValuePair(i, t))); } } + + // Try to get back to the last loaded track + int currentFoundTrack = 0; + if(_trackPlaybackOrder == null || _trackPlaybackOrder.Count == 0) + { + currentFoundTrack = 0; + } + else if(_trackPlaybackOrder.Any(kvp => kvp.Key == CurrentDisc)) + { + currentFoundTrack = _trackPlaybackOrder.FindIndex(kvp => kvp.Key == CurrentDisc && kvp.Value == CurrentTrackNumber); + if(currentFoundTrack == -1) + currentFoundTrack = _trackPlaybackOrder.Where(kvp => kvp.Key == CurrentDisc).Min(kvp => kvp.Value); + } + else + { + int lowestDiscNumber = _trackPlaybackOrder.Min(kvp => kvp.Key); + currentFoundTrack = _trackPlaybackOrder.Where(kvp => kvp.Key == lowestDiscNumber).Min(kvp => kvp.Value); + } + + _currentTrackInOrder = currentFoundTrack; } #region Playback (UI) @@ -581,11 +607,13 @@ namespace RedBookPlayer.Models.Hardware /// /// Move to the next playable track /// + /// This should follow the track playback order public void NextTrack() => SelectTrack(CurrentTrackNumber + 1); /// /// Move to the previous playable track /// + /// This should follow the track playback order public void PreviousTrack() => SelectTrack(CurrentTrackNumber - 1); ///