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();