cleaned up controller states. changed to stopped, playing, paused.

This commit is contained in:
Don Archer 2016-08-04 21:35:29 -07:00
parent caeca57cc9
commit 7d07f26bfa
4 changed files with 81 additions and 147 deletions

View File

@ -17,11 +17,10 @@ namespace KaraokePlayer.Classes
AuthSecret = ConfigurationManager.AppSettings["Firebase.Secret"], AuthSecret = ConfigurationManager.AppSettings["Firebase.Secret"],
BasePath = ConfigurationManager.AppSettings["Firebase.Path"] BasePath = ConfigurationManager.AppSettings["Firebase.Path"]
}; };
private string _state = "play"; private string _state = "playing";
private IFirebaseClient _client; private IFirebaseClient _client;
private ControllerStateChangedEventHandler _stateChanged; private ControllerStateChangedEventHandler _stateChanged;
private ControllerSongChangedEventHandler _songChanged; private ControllerSongChangedEventHandler _songChanged;
private ControllerPlayQueueChangedEventHandler _playQueueChanged;
private string StatePath private string StatePath
{ {
@ -40,20 +39,16 @@ namespace KaraokePlayer.Classes
public Song CurrentSong { get; set; } public Song CurrentSong { get; set; }
public List<Song> PlayQueue { get; set; } public List<Song> PlayQueue { get; set; }
public string State { public void SetState(PlayerState state)
get { return State; } {
set {
_state = value;
Update(string.Format("controllers/{0}", this.Id), new { state = _state }); Update(string.Format("controllers/{0}", this.Id), new { state = _state });
} }
}
public FirebaseController(string clientId, ControllerStateChangedEventHandler stateChanged, ControllerSongChangedEventHandler songChanged, ControllerPlayQueueChangedEventHandler playQueueChanged) public FirebaseController(string clientId, ControllerStateChangedEventHandler stateChanged, ControllerSongChangedEventHandler songChanged)
{ {
Id = clientId; Id = clientId;
_stateChanged = stateChanged; _stateChanged = stateChanged;
_songChanged = songChanged; _songChanged = songChanged;
_playQueueChanged = playQueueChanged;
PlayQueue = new List<Song>(); PlayQueue = new List<Song>();
_client = new FirebaseClient(config); _client = new FirebaseClient(config);
Reset(); Reset();
@ -63,19 +58,11 @@ namespace KaraokePlayer.Classes
public void NextSong() public void NextSong()
{ {
Song song = PlayQueue.FirstOrDefault(); Song song = PlayQueue.FirstOrDefault();
Stop();
if(song != null) { PlaySong(song); } if(song != null) { PlaySong(song); }
} }
public void PlaySong(Song song) { Update(string.Format("Controllers/{0}", this.Id), new { CurrentSong = song }); } public void PlaySong(Song song) { Update(string.Format("Controllers/{0}", this.Id), new { CurrentSong = song }); }
public void Next() { this.State = "next"; }
public void Play() { this.State = "play"; }
public void Stop() { this.State = "stop"; }
public void Pause() { this.State = "pause"; }
private void Delete(string path) { _client.DeleteAsync(path); } private void Delete(string path) { _client.DeleteAsync(path); }
@ -83,7 +70,6 @@ namespace KaraokePlayer.Classes
private void Reset() private void Reset()
{ {
Stop();
Delete(PlayQueuePath); Delete(PlayQueuePath);
Delete(CurrentSongPath); Delete(CurrentSongPath);
} }
@ -105,70 +91,15 @@ namespace KaraokePlayer.Classes
await _client.OnAsync(StatePath, await _client.OnAsync(StatePath,
added: (s, args, obj) => added: (s, args, obj) =>
{ {
Console.WriteLine("state added"); // do we need this? don't think so
StateDidChange(args.Data);
}, },
changed: (s, args, obj) => changed: (s, args, obj) =>
{ {
Console.WriteLine("state changed"); Console.WriteLine("state changed " + args.Data);
StateDidChange(args.Data); StateDidChange(args.Data);
}, },
removed: null removed: null
); );
/*
await _client.OnAsync(PlayQueuePath,
added: (s, args, obj) =>
{
Console.WriteLine(args.Path);
if (args.Path.Contains("Id"))
{
PlayQueueDidChange();
}
},
changed: (s, args, obj) =>
{
if (args.Path.Contains("Id"))
{
PlayQueueDidChange();
}
},
removed: (s, args, obj) =>
{
PlayQueueDidChange();
}
);
await _client.OnAsync(StatePath,
added: (s, args, obj) =>
{
StateDidChange(args.Data);
},
changed: (s, args, obj) =>
{
StateDidChange(args.Data);
},
removed: null
);
*/
}
private void PlayQueueDidChange()
{
bool autoPlay = PlayQueue.Count() == 0;
var response = _client.Get(PlayQueuePath);
var dict = response.ResultAs<Dictionary<string, Song>>();
PlayQueue.Clear();
if (dict != null && dict.Count() > 0)
{
var array = dict.Values.ToArray();
PlayQueue.AddRange(array);
if (autoPlay)
{
NextSong();
}
}
if (_playQueueChanged != null) { _playQueueChanged(); }
} }
private void CurrentSongDidChange() private void CurrentSongDidChange()
@ -184,17 +115,18 @@ namespace KaraokePlayer.Classes
private void StateDidChange(string state) private void StateDidChange(string state)
{ {
if (state == _state) return;
_state = state; _state = state;
switch(state) switch(state)
{ {
case "pause": case "paused":
_stateChanged(new ControllerStateChangedEventArgs(PlayerState.Pause)); _stateChanged(new ControllerStateChangedEventArgs(PlayerState.Paused));
break; break;
case "stop": case "stopped":
_stateChanged(new ControllerStateChangedEventArgs(PlayerState.Stop)); _stateChanged(new ControllerStateChangedEventArgs(PlayerState.Stopped));
break; break;
case "play": case "playing":
_stateChanged(new ControllerStateChangedEventArgs(PlayerState.Play)); _stateChanged(new ControllerStateChangedEventArgs(PlayerState.Playing));
break; break;
} }
} }

View File

@ -19,20 +19,12 @@ namespace KaraokePlayer.Classes
{ {
public ControllerSongChangedEventArgs(Song song) public ControllerSongChangedEventArgs(Song song)
{ {
ShouldPlay = true;
Song = song;
}
public ControllerSongChangedEventArgs(bool shouldPlay, Song song)
{
ShouldPlay = shouldPlay;
Song = song; Song = song;
} }
public Song Song { get; } public Song Song { get; }
public bool ShouldPlay { get; }
} }
public delegate void ControllerStateChangedEventHandler(ControllerStateChangedEventArgs args); public delegate void ControllerStateChangedEventHandler(ControllerStateChangedEventArgs args);
public delegate void ControllerSongChangedEventHandler(ControllerSongChangedEventArgs args); public delegate void ControllerSongChangedEventHandler(ControllerSongChangedEventArgs args);
public delegate void ControllerPlayQueueChangedEventHandler();
} }

View File

@ -8,9 +8,8 @@ namespace Herse.Models
{ {
public enum PlayerState public enum PlayerState
{ {
Play, Playing,
Stop, Stopped,
Pause, Paused
Next
} }
} }

View File

@ -39,21 +39,17 @@ namespace KaraokePlayer
clientId: ConfigurationManager.AppSettings["KaraokePlayer.ControllerId"], clientId: ConfigurationManager.AppSettings["KaraokePlayer.ControllerId"],
stateChanged: (args) => stateChanged: (args) =>
{ {
if (args.State == PlayerState.Play) switch (args.State)
{ {
case PlayerState.Playing:
this.Invoke(new Action(() => { play(); })); this.Invoke(new Action(() => { play(); }));
} break;
else if (args.State == PlayerState.Pause) case PlayerState.Paused:
{
this.Invoke(new Action(() => { pause(); })); this.Invoke(new Action(() => { pause(); }));
} break;
else if (args.State == PlayerState.Next) case PlayerState.Stopped:
{
this.Invoke(new Action(() => { next(); }));
}
else
{
this.Invoke(new Action(() => { stop(); })); this.Invoke(new Action(() => { stop(); }));
break;
} }
}, },
songChanged: (args) => songChanged: (args) =>
@ -61,9 +57,7 @@ namespace KaraokePlayer
this.Invoke(new Action(() => { stop(); })); this.Invoke(new Action(() => { stop(); }));
currentSong = args.Song; currentSong = args.Song;
this.Invoke(new Action(() => { previewSong(); })); this.Invoke(new Action(() => { previewSong(); }));
}, });
playQueueChanged: null
);
} }
private async void previewSong() private async void previewSong()
@ -72,6 +66,7 @@ namespace KaraokePlayer
songInfoForm.Show(); songInfoForm.Show();
await Task.Delay(TimeSpan.FromSeconds(5)); await Task.Delay(TimeSpan.FromSeconds(5));
play(); play();
controller.SetState(PlayerState.Playing);
songInfoForm.Hide(); songInfoForm.Hide();
} }
@ -104,15 +99,30 @@ namespace KaraokePlayer
currentPlayer.Resume(); currentPlayer.Resume();
return; return;
} }
if (currentSong.FileType == FileType.CDG) switch(currentSong.FileType)
{ {
currentPlayer = karaokeCDGPlayer; case FileType.CDG:
karaokeCDGPlayer.Play(new Uri(Path.ChangeExtension(currentSong.Path, ".mp3"))); PlayCdg();
karaokeCDGPlayer.Visible = true; break;
karaokeMP4Player.Visible = false; case FileType.ZIP:
karaokeMP4Player.Stop(); PlayZip();
break;
case FileType.MP4:
PlayM4p();
break;
} }
else if (currentSong.FileType == FileType.ZIP) }
private void PlayM4p()
{
currentPlayer = karaokeMP4Player;
karaokeMP4Player.Play(new Uri(currentSong.Path));
karaokeMP4Player.Visible = true;
karaokeCDGPlayer.Visible = false;
karaokeCDGPlayer.Stop();
}
private void PlayZip()
{ {
string playPath = null; string playPath = null;
string extractPath = Path.Combine(Directory.GetCurrentDirectory(), "temp"); string extractPath = Path.Combine(Directory.GetCurrentDirectory(), "temp");
@ -138,13 +148,14 @@ namespace KaraokePlayer
karaokeMP4Player.Stop(); karaokeMP4Player.Stop();
} }
} }
else {
currentPlayer = karaokeMP4Player; private void PlayCdg()
karaokeMP4Player.Play(new Uri(currentSong.Path)); {
karaokeMP4Player.Visible = true; currentPlayer = karaokeCDGPlayer;
karaokeCDGPlayer.Visible = false; karaokeCDGPlayer.Play(new Uri(Path.ChangeExtension(currentSong.Path, ".mp3")));
karaokeCDGPlayer.Stop(); karaokeCDGPlayer.Visible = true;
} karaokeMP4Player.Visible = false;
karaokeMP4Player.Stop();
} }
private void DeleteDirectory(string target_dir) private void DeleteDirectory(string target_dir)