From f5127ee35122696f1a1edd290b4da91548c46080 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Wed, 6 Oct 2021 11:01:07 -0700 Subject: [PATCH] Create SelectRelativeTrack (unused) --- RedBookPlayer.Models/Hardware/Player.cs | 46 +++++++++++++++++++++---- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/RedBookPlayer.Models/Hardware/Player.cs b/RedBookPlayer.Models/Hardware/Player.cs index d2da495..89cecb0 100644 --- a/RedBookPlayer.Models/Hardware/Player.cs +++ b/RedBookPlayer.Models/Hardware/Player.cs @@ -828,12 +828,12 @@ namespace RedBookPlayer.Models.Hardware /// Select a track by number /// /// Track number to attempt to load + /// True if the track was changed, false otherwise /// TODO: This needs to reset the pointer in the track playback order - /// TODO: There needs to be a SelectRelativeTrack variant that follows order and then invokes this - public void SelectTrack(int trackNumber) + public bool SelectTrack(int trackNumber) { if(_opticalDiscs[CurrentDisc] == null || !_opticalDiscs[CurrentDisc].Initialized) - return; + return false; PlayerState wasPlaying = PlayerState; if(wasPlaying == PlayerState.Playing) @@ -860,7 +860,7 @@ namespace RedBookPlayer.Models.Hardware if(wasPlaying == PlayerState.Playing) Play(); - return; + return true; } else if((trackNumber < 1 && !LoadHiddenTracks) || (trackNumber < (int)compactDisc.Tracks.Min(t => t.TrackSequence))) { @@ -874,7 +874,7 @@ namespace RedBookPlayer.Models.Hardware if(wasPlaying == PlayerState.Playing) Play(); - return; + return true; } } @@ -912,7 +912,7 @@ namespace RedBookPlayer.Models.Hardware // Cache the current track for easy access Track track = compactDisc.GetTrack(cachedTrackNumber); if(track == null) - return; + return false; // If the track is playable, just return if((track.TrackType == TrackType.Audio || DataPlayback != DataPlayback.Skip) @@ -966,6 +966,40 @@ namespace RedBookPlayer.Models.Hardware _opticalDiscs[CurrentDisc].LoadTrack(trackNumber); } + if(wasPlaying == PlayerState.Playing) + Play(); + + return true; + } + + /// + /// Select a track in the relative track list by number + /// + /// Relative track number to attempt to load + public void SelectRelativeTrack(int relativeTrackNumber) + { + if(_trackPlaybackOrder == null || _trackPlaybackOrder.Count == 0) + return; + + PlayerState wasPlaying = PlayerState; + if(wasPlaying == PlayerState.Playing) + Pause(); + + if(relativeTrackNumber < 0) + relativeTrackNumber = _trackPlaybackOrder.Count - 1; + else if(relativeTrackNumber >= _trackPlaybackOrder.Count) + relativeTrackNumber = 0; + + do + { + _currentTrackInOrder = relativeTrackNumber; + KeyValuePair discTrackPair = _trackPlaybackOrder[relativeTrackNumber]; + SelectDisc(discTrackPair.Key); + if(SelectTrack(discTrackPair.Value)) + break; + } + while(true); + if(wasPlaying == PlayerState.Playing) Play(); }