diff --git a/RedBookPlayer.GUI/ViewModels/PlayerViewModel.cs b/RedBookPlayer.GUI/ViewModels/PlayerViewModel.cs index 45a9d08..931fdac 100644 --- a/RedBookPlayer.GUI/ViewModels/PlayerViewModel.cs +++ b/RedBookPlayer.GUI/ViewModels/PlayerViewModel.cs @@ -423,7 +423,7 @@ namespace RedBookPlayer.GUI.ViewModels } } - #region Playback + #region Playback (UI) /// /// Begin playback @@ -440,6 +440,11 @@ namespace RedBookPlayer.GUI.ViewModels /// public void ExecuteTogglePlayPause() => _player?.TogglePlayback(); + /// + /// Shuffle the current track list + /// + public void ExecuteShuffle() => _player?.ShuffleTracks(); + /// /// Stop current playback /// @@ -470,11 +475,6 @@ namespace RedBookPlayer.GUI.ViewModels /// public void ExecutePreviousTrack() => _player?.PreviousTrack(); - /// - /// Shuffle the current track list - /// - public void ExecuteShuffle() => _player?.ShuffleTracks(); - /// /// Move to the next index /// @@ -497,6 +497,29 @@ namespace RedBookPlayer.GUI.ViewModels #endregion + #region Playback (Internal) + + /// + /// Select a particular disc by number + /// + /// Disc number to attempt to load + public void SelectDisc(int discNumber) => _player?.SelectDisc(discNumber); + + /// + /// Select a particular index by number + /// + /// Track index to attempt to load + /// True if index changes can trigger a track change, false otherwise + public void SelectIndex(ushort index, bool changeTrack) => _player?.SelectIndex(index, changeTrack); + + /// + /// Select a particular track by number + /// + /// Track number to attempt to load + public void SelectTrack(int trackNumber) => _player?.SelectTrack(trackNumber); + + #endregion + #region Volume /// @@ -541,6 +564,111 @@ namespace RedBookPlayer.GUI.ViewModels #endregion + #region Extraction + + /// + /// Extract a single track from the image to WAV + /// + /// + /// Output path to write data to + public void ExtractSingleTrackToWav(uint trackNumber, string outputDirectory) => _player?.ExtractSingleTrackToWav(trackNumber, outputDirectory); + + /// + /// Extract all tracks from the image to WAV + /// + /// Output path to write data to + public void ExtractAllTracksToWav(string outputDirectory) => _player?.ExtractAllTracksToWav(outputDirectory); + + #endregion + + #region Setters + + /// + /// Set data playback method [CompactDisc only] + /// + /// New playback value + public void SetDataPlayback(DataPlayback dataPlayback) => _player?.SetDataPlayback(dataPlayback); + + /// + /// Set disc handling method + /// + /// New playback value + public void SetDiscHandling(DiscHandling discHandling) => _player?.SetDiscHandling(discHandling); + + /// + /// Set the value for loading hidden tracks [CompactDisc only] + /// + /// True to enable loading hidden tracks, false otherwise + public void SetLoadHiddenTracks(bool load) => _player?.SetLoadHiddenTracks(load); + + /// + /// Set repeat mode + /// + /// New repeat mode value + public void SetRepeatMode(RepeatMode repeatMode) => _player?.SetRepeatMode(repeatMode); + + /// + /// Set session handling + /// + /// New session handling value + public void SetSessionHandling(SessionHandling sessionHandling) => _player?.SetSessionHandling(sessionHandling); + + #endregion + + #region State Change Event Handlers + + /// + /// Update the view-model from the Player + /// + private void PlayerStateChanged(object sender, PropertyChangedEventArgs e) + { + if(_player == null) + return; + + if(!_player.Initialized) + { + Dispatcher.UIThread.InvokeAsync(() => + { + App.MainWindow.Title = "RedBookPlayer"; + }); + } + + ImagePath = _player.ImagePath; + Initialized = _player.Initialized; + + if (!string.IsNullOrWhiteSpace(ImagePath) && Initialized) + { + Dispatcher.UIThread.InvokeAsync(() => + { + App.MainWindow.Title = "RedBookPlayer - " + ImagePath.Split('/').Last().Split('\\').Last(); + }); + } + + CurrentDisc = _player.CurrentDisc; + CurrentTrackNumber = _player.CurrentTrackNumber; + CurrentTrackIndex = _player.CurrentTrackIndex; + CurrentTrackSession = _player.CurrentTrackSession; + CurrentSector = _player.CurrentSector; + SectionStartSector = _player.SectionStartSector; + + HiddenTrack = _player.HiddenTrack; + + QuadChannel = _player.QuadChannel; + IsDataTrack = _player.IsDataTrack; + CopyAllowed = _player.CopyAllowed; + TrackHasEmphasis = _player.TrackHasEmphasis; + + PlayerState = _player.PlayerState; + DataPlayback = _player.DataPlayback; + RepeatMode = _player.RepeatMode; + ApplyDeEmphasis = _player.ApplyDeEmphasis; + Volume = _player.Volume; + + UpdateDigits(); + } + + #endregion + #region Helpers /// @@ -696,68 +824,6 @@ namespace RedBookPlayer.GUI.ViewModels SetSessionHandling(App.Settings.SessionHandling); } - /// - /// Extract a single track from the image to WAV - /// - /// - /// Output path to write data to - public void ExtractSingleTrackToWav(uint trackNumber, string outputDirectory) => _player?.ExtractSingleTrackToWav(trackNumber, outputDirectory); - - /// - /// Extract all tracks from the image to WAV - /// - /// Output path to write data to - public void ExtractAllTracksToWav(string outputDirectory) => _player?.ExtractAllTracksToWav(outputDirectory); - - /// - /// Select a particular disc by number - /// - /// Disc number to attempt to load - public void SelectDisc(int discNumber) => _player?.SelectDisc(discNumber); - - /// - /// Select a particular index by number - /// - /// Track index to attempt to load - /// True if index changes can trigger a track change, false otherwise - public void SelectIndex(ushort index, bool changeTrack) => _player?.SelectIndex(index, changeTrack); - - /// - /// Select a particular track by number - /// - /// Track number to attempt to load - public void SelectTrack(int trackNumber) => _player?.SelectTrack(trackNumber); - - /// - /// Set data playback method [CompactDisc only] - /// - /// New playback value - public void SetDataPlayback(DataPlayback dataPlayback) => _player?.SetDataPlayback(dataPlayback); - - /// - /// Set disc handling method - /// - /// New playback value - public void SetDiscHandling(DiscHandling discHandling) => _player?.SetDiscHandling(discHandling); - - /// - /// Set the value for loading hidden tracks [CompactDisc only] - /// - /// True to enable loading hidden tracks, false otherwise - public void SetLoadHiddenTracks(bool load) => _player?.SetLoadHiddenTracks(load); - - /// - /// Set repeat mode - /// - /// New repeat mode value - public void SetRepeatMode(RepeatMode repeatMode) => _player?.SetRepeatMode(repeatMode); - - /// - /// Set session handling - /// - /// New session handling value - public void SetSessionHandling(SessionHandling sessionHandling) => _player?.SetSessionHandling(sessionHandling); - /// /// Generate the digit string to be interpreted by the frontend /// @@ -879,56 +945,6 @@ namespace RedBookPlayer.GUI.ViewModels UpdateDigits(); } - /// - /// Update the view-model from the Player - /// - private void PlayerStateChanged(object sender, PropertyChangedEventArgs e) - { - if(_player == null) - return; - - if(!_player.Initialized) - { - Dispatcher.UIThread.InvokeAsync(() => - { - App.MainWindow.Title = "RedBookPlayer"; - }); - } - - ImagePath = _player.ImagePath; - Initialized = _player.Initialized; - - if (!string.IsNullOrWhiteSpace(ImagePath) && Initialized) - { - Dispatcher.UIThread.InvokeAsync(() => - { - App.MainWindow.Title = "RedBookPlayer - " + ImagePath.Split('/').Last().Split('\\').Last(); - }); - } - - CurrentDisc = _player.CurrentDisc; - CurrentTrackNumber = _player.CurrentTrackNumber; - CurrentTrackIndex = _player.CurrentTrackIndex; - CurrentTrackSession = _player.CurrentTrackSession; - CurrentSector = _player.CurrentSector; - SectionStartSector = _player.SectionStartSector; - - HiddenTrack = _player.HiddenTrack; - - QuadChannel = _player.QuadChannel; - IsDataTrack = _player.IsDataTrack; - CopyAllowed = _player.CopyAllowed; - TrackHasEmphasis = _player.TrackHasEmphasis; - - PlayerState = _player.PlayerState; - DataPlayback = _player.DataPlayback; - RepeatMode = _player.RepeatMode; - ApplyDeEmphasis = _player.ApplyDeEmphasis; - Volume = _player.Volume; - - UpdateDigits(); - } - /// /// Update UI ///