diff --git a/RedBookPlayer.GUI/ViewModels/MainViewModel.cs b/RedBookPlayer.GUI/ViewModels/MainViewModel.cs index 79a8ef0..17172c8 100644 --- a/RedBookPlayer.GUI/ViewModels/MainViewModel.cs +++ b/RedBookPlayer.GUI/ViewModels/MainViewModel.cs @@ -100,6 +100,12 @@ namespace RedBookPlayer.GUI.ViewModels PlayerView?.ViewModel?.ExecutePreviousTrack(); } + // Shuffle Track List + // else if(e.Key == App.Settings.ShuffleTracksKey) + // { + // PlayerView?.ViewModel?.ExecuteShuffle(); + // } + // Next Index else if(e.Key == App.Settings.NextIndexKey) { diff --git a/RedBookPlayer.GUI/ViewModels/PlayerViewModel.cs b/RedBookPlayer.GUI/ViewModels/PlayerViewModel.cs index f8a7b31..45a9d08 100644 --- a/RedBookPlayer.GUI/ViewModels/PlayerViewModel.cs +++ b/RedBookPlayer.GUI/ViewModels/PlayerViewModel.cs @@ -470,6 +470,11 @@ namespace RedBookPlayer.GUI.ViewModels /// public void ExecutePreviousTrack() => _player?.PreviousTrack(); + /// + /// Shuffle the current track list + /// + public void ExecuteShuffle() => _player?.ShuffleTracks(); + /// /// Move to the next index /// diff --git a/RedBookPlayer.GUI/ViewModels/SettingsViewModel.cs b/RedBookPlayer.GUI/ViewModels/SettingsViewModel.cs index e51125d..4754fb9 100644 --- a/RedBookPlayer.GUI/ViewModels/SettingsViewModel.cs +++ b/RedBookPlayer.GUI/ViewModels/SettingsViewModel.cs @@ -180,6 +180,11 @@ namespace RedBookPlayer.GUI.ViewModels /// public Key PreviousTrackKey { get; set; } = Key.Left; + /// + /// Key assigned to shuffling the track list + /// + // public Key ShuffleTracksKey { get; set; } = Key.R; + /// /// Key assigned to move to the next index /// diff --git a/RedBookPlayer.Models/Hardware/Player.cs b/RedBookPlayer.Models/Hardware/Player.cs index b5fdf30..bd3ce3a 100644 --- a/RedBookPlayer.Models/Hardware/Player.cs +++ b/RedBookPlayer.Models/Hardware/Player.cs @@ -415,7 +415,7 @@ namespace RedBookPlayer.Models.Hardware } /// - /// Load the track list into the track dictionary for the current disc + /// Load the track list into the track dictionary /// private void LoadTrackList() { @@ -455,6 +455,14 @@ namespace RedBookPlayer.Models.Hardware } // Try to get back to the last loaded track + SetTrackOrderIndex(); + } + + /// + /// Set the current track order index, if possible + /// + private void SetTrackOrderIndex() + { int currentFoundTrack = 0; if(_trackPlaybackOrder == null || _trackPlaybackOrder.Count == 0) { @@ -553,6 +561,16 @@ namespace RedBookPlayer.Models.Hardware } _trackPlaybackOrder = newPlaybackOrder; + switch(PlayerState) + { + case PlayerState.Stopped: + _currentTrackInOrder = 0; + break; + case PlayerState.Paused: + case PlayerState.Playing: + SetTrackOrderIndex(); + break; + } } /// @@ -924,7 +942,7 @@ namespace RedBookPlayer.Models.Hardware _opticalDiscs[CurrentDisc].LoadTrack(trackNumber); } - LoadTrackList(); + SetTrackOrderIndex(); if(wasPlaying == PlayerState.Playing) Play();