diff --git a/KaraokePlayer/Classes/Enums.cs b/FirebaseKaraoke/Enums.cs similarity index 100% rename from KaraokePlayer/Classes/Enums.cs rename to FirebaseKaraoke/Enums.cs diff --git a/KaraokePlayer/Classes/FirebaseController.cs b/FirebaseKaraoke/FirebaseController.cs similarity index 94% rename from KaraokePlayer/Classes/FirebaseController.cs rename to FirebaseKaraoke/FirebaseController.cs index 4ee2576..6f7e8c3 100644 --- a/KaraokePlayer/Classes/FirebaseController.cs +++ b/FirebaseKaraoke/FirebaseController.cs @@ -20,6 +20,7 @@ namespace KaraokePlayer.Classes public string Artist { get; set; } public FileType FileType { get; set; } public string Path { get; set; } + public string Description { get { return Artist + " - " + Title; } } } @@ -163,7 +164,7 @@ namespace KaraokePlayer.Classes var dict = response.ResultAs>(); PlayQueue.Clear(); - if (dict.Count() > 0) + if (dict != null && dict.Count() > 0) { foreach (KeyValuePair entry in dict) { @@ -178,18 +179,21 @@ namespace KaraokePlayer.Classes } } if (PlayQueueChanged != null) { PlayQueueChanged(); } + PlayQueueChanged(); } private void CurrentSongChanged() { var response = client.Get("controller/currentSong"); var dict = response.ResultAs>(); - - var song = dict.Values.FirstOrDefault(); - if (song != null) + if (dict != null) { - CurrentSong = song; - SongChanged(new ControllerSongChangedEventArgs(false, song)); + var song = dict.Values.FirstOrDefault(); + if (song != null) + { + CurrentSong = song; + SongChanged(new ControllerSongChangedEventArgs(false, song)); + } } } diff --git a/FirebaseKaraoke/FirebaseKaraoke.csproj b/FirebaseKaraoke/FirebaseKaraoke.csproj new file mode 100644 index 0000000..190ae52 --- /dev/null +++ b/FirebaseKaraoke/FirebaseKaraoke.csproj @@ -0,0 +1,95 @@ + + + + + Debug + AnyCPU + {4FE25E6D-1BEB-4902-9815-C2B421233BD7} + Library + Properties + FirebaseKaraoke + FirebaseKaraoke + v4.5.2 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\FireSharp.2.0.4\lib\portable-net45+sl5+wp8+win8\FireSharp.dll + True + + + ..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll + True + + + ..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.dll + True + + + ..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll + True + + + ..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll + True + + + + + + ..\packages\Microsoft.Net.Http.2.2.28\lib\net45\System.Net.Http.Extensions.dll + True + + + ..\packages\Microsoft.Net.Http.2.2.28\lib\net45\System.Net.Http.Primitives.dll + True + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KaraokePlayer/Classes/Interfaces.cs b/FirebaseKaraoke/Interfaces.cs similarity index 100% rename from KaraokePlayer/Classes/Interfaces.cs rename to FirebaseKaraoke/Interfaces.cs diff --git a/KaraokePlayer/Classes/PlayerDelegates.cs b/FirebaseKaraoke/PlayerDelegates.cs similarity index 100% rename from KaraokePlayer/Classes/PlayerDelegates.cs rename to FirebaseKaraoke/PlayerDelegates.cs diff --git a/FirebaseKaraoke/Properties/AssemblyInfo.cs b/FirebaseKaraoke/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9253f6d --- /dev/null +++ b/FirebaseKaraoke/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FirebaseKaraoke")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FirebaseKaraoke")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4fe25e6d-1beb-4902-9815-c2b421233bd7")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/FirebaseKaraoke/packages.config b/FirebaseKaraoke/packages.config new file mode 100644 index 0000000..45a2770 --- /dev/null +++ b/FirebaseKaraoke/packages.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/KaraokePlayer.sln b/KaraokePlayer.sln index be89bcd..31e609d 100644 --- a/KaraokePlayer.sln +++ b/KaraokePlayer.sln @@ -17,6 +17,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApplication1", "Cons EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestSelector", "TestSelector\TestSelector.csproj", "{B81665BC-A207-47F5-BBF4-2DE59965325F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FirebaseKaraoke", "FirebaseKaraoke\FirebaseKaraoke.csproj", "{4FE25E6D-1BEB-4902-9815-C2B421233BD7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -43,6 +45,10 @@ Global {B81665BC-A207-47F5-BBF4-2DE59965325F}.Debug|Any CPU.Build.0 = Debug|Any CPU {B81665BC-A207-47F5-BBF4-2DE59965325F}.Release|Any CPU.ActiveCfg = Release|Any CPU {B81665BC-A207-47F5-BBF4-2DE59965325F}.Release|Any CPU.Build.0 = Release|Any CPU + {4FE25E6D-1BEB-4902-9815-C2B421233BD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4FE25E6D-1BEB-4902-9815-C2B421233BD7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4FE25E6D-1BEB-4902-9815-C2B421233BD7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4FE25E6D-1BEB-4902-9815-C2B421233BD7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/KaraokePlayer/KaraokePlayer.csproj b/KaraokePlayer/KaraokePlayer.csproj index 1549387..66d8d73 100644 --- a/KaraokePlayer/KaraokePlayer.csproj +++ b/KaraokePlayer/KaraokePlayer.csproj @@ -57,10 +57,6 @@ ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll True - - ..\packages\FireSharp.2.0.4\lib\portable-net45+sl5+wp8+win8\FireSharp.dll - True - False lib\MaterialSkin.dll @@ -108,10 +104,6 @@ - - - - Form @@ -470,6 +462,10 @@ {a5324295-6bd2-4415-92cd-6ea77d708e00} CdgPlayer + + {4fe25e6d-1beb-4902-9815-c2b421233bd7} + FirebaseKaraoke + diff --git a/KaraokePlayer/packages.config b/KaraokePlayer/packages.config index d767685..c63e4c1 100644 --- a/KaraokePlayer/packages.config +++ b/KaraokePlayer/packages.config @@ -1,7 +1,6 @@  - diff --git a/TestSelector/Classes/Enums.cs b/TestSelector/Classes/Enums.cs deleted file mode 100644 index d5a9bc5..0000000 --- a/TestSelector/Classes/Enums.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace KaraokePlayer.Enums -{ - public enum PlayerState - { - Play, - Stop, - Pause, - Next - } - - public enum FileType - { - CDG, MP4, ZIP - } -} diff --git a/TestSelector/Classes/FirebaseController.cs b/TestSelector/Classes/FirebaseController.cs deleted file mode 100644 index f8aa5a3..0000000 --- a/TestSelector/Classes/FirebaseController.cs +++ /dev/null @@ -1,216 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using KaraokePlayer.Interfaces; -using KaraokePlayer.Enums; -using FireSharp.Interfaces; -using FireSharp.Config; -using FireSharp; - -namespace KaraokePlayer.Classes -{ - public class FirebaseSong : ISong - { - public string FirebaseId { get; set; } - public int Id { get; set; } - public int Order { get; set; } - public string Title { get; set; } - public string Artist { get; set; } - public FileType FileType { get; set; } - public string Path { get; set; } - - public string Description { get { return Artist + " - " + Title; } } - } - - public class FirebaseController : IController - { - private IFirebaseConfig config = new FirebaseConfig - { - AuthSecret = "wj0ERDFZqNSysTtIXcCgCr8Itahr6pJOBeqCjvDF", - BasePath = "https://karaokecontroller.firebaseio.com/" - }; - private IFirebaseClient client; - private ControllerStateChangedEventHandler StateChanged; - private ControllerSongChangedEventHandler SongChanged; - private ControllerPlayQueueChangedEventHandler PlayQueueChanged; - public FirebaseController(ControllerStateChangedEventHandler stateChanged, ControllerSongChangedEventHandler songChanged, ControllerPlayQueueChangedEventHandler playQueueChanged) - { - StateChanged = stateChanged; - SongChanged = songChanged; - PlayQueueChanged = playQueueChanged; - PlayQueue = new List(); - client = new FirebaseClient(config); - client.DeleteAsync("controller/state"); - client.PushAsync("controller/state", "stop"); - client.DeleteAsync("controller/playQueue"); - client.DeleteAsync("controller/currentSong"); - ListenToStream(); - } - - public int Id { get; set; } - public ISong CurrentSong { get; set; } - public List PlayQueue { get; set; } - public void GetNextSong() - { - ISong song = PlayQueue.FirstOrDefault(); - Stop(); - client.DeleteAsync("controller/currentSong"); - client.PushAsync("controller/currentSong", song); - } - - public void PlaySong(ISong song) - { - client.DeleteAsync("controller/currentSong"); - client.PushAsync("controller/currentSong", song); - } - public void AddSongToQueue(ISong song) - { - client.PushAsync("controller/playQueue", song); - } - - public void RemoveSong(ISong song) - { - ISong found = PlayQueue.FirstOrDefault(s => s.Id == song.Id); - if (found != null) - { - PlayQueue.Remove(found); - client.DeleteAsync("controller/playQueue/" + ((FirebaseSong)song).FirebaseId); - } - } - public void Next() - { - client.DeleteAsync("controller/state"); - client.PushAsync("controller/state", "next"); - } - - public void Play() - { - client.DeleteAsync("controller/state"); - client.PushAsync("controller/state", "play"); - } - - public void Stop() - { - client.DeleteAsync("controller/state"); - client.PushAsync("controller/state", "stop"); - } - - public void Pause() - { - client.DeleteAsync("controller/state"); - client.PushAsync("controller/state", "pause"); - } - - private async void ListenToStream() - { - await client.OnAsync("controller/currentSong", - added: (s, args, obj) => - { - if (args.Path.Contains("Id")) - { - CurrentSongChanged(); - } - }, - changed: (s, args, obj) => - { - if (args.Path.Contains("Id")) - { - CurrentSongChanged(); - } - }, - removed: null - ); - - await client.OnAsync("controller/playQueue", - added: (s, args, obj) => - { - if (args.Path.Contains("Id")) - { - ReloadPlayQueue(); - } - }, - changed: (s, args, obj) => - { - if (args.Path.Contains("Id")) - { - ReloadPlayQueue(); - } - }, - removed: (s, args, obj) => - { - ReloadPlayQueue(); - } - ); - - await client.OnAsync("controller/state", - added: (s, args, obj) => - { - RemoteStateChanged(args.Data); - }, - changed: (s, args, obj) => - { - RemoteStateChanged(args.Data); - }, - removed: null - ); - } - - private void ReloadPlayQueue() - { - bool autoPlay = PlayQueue.Count() == 0; - var response = client.Get("controller/playQueue"); - var dict = response.ResultAs>(); - - PlayQueue.Clear(); - if (dict.Count() > 0) - { - foreach (KeyValuePair entry in dict) - { - entry.Value.FirebaseId = entry.Key; - } - - var array = dict.Values.OrderBy(s => s.Order).ToArray(); - PlayQueue.AddRange(array); - if (autoPlay) - { - GetNextSong(); - } - } - PlayQueueChanged(); - } - - private void CurrentSongChanged() - { - var response = client.Get("controller/currentSong"); - var dict = response.ResultAs>(); - - var song = dict.Values.FirstOrDefault(); - if (song != null) - { - CurrentSong = song; - SongChanged(new ControllerSongChangedEventArgs(false, song)); - } - } - - private void RemoteStateChanged(string state) - { - PlayerState s = PlayerState.Play; - if(state.ToLower() == "pause") - { - s = PlayerState.Pause; - } - else if (state.ToLower() == "stop") - { - s = PlayerState.Stop; - } - else if (state == "next") - { - s = PlayerState.Next; - } - StateChanged(new ControllerStateChangedEventArgs(s)); - } - - } -} diff --git a/TestSelector/Classes/Interfaces.cs b/TestSelector/Classes/Interfaces.cs deleted file mode 100644 index bcf947d..0000000 --- a/TestSelector/Classes/Interfaces.cs +++ /dev/null @@ -1,32 +0,0 @@ -using KaraokePlayer.Enums; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace KaraokePlayer.Interfaces -{ - public interface ISong - { - int Id { get; set; } - int Order { get; set; } - string Title { get; set; } - string Artist { get; set; } - FileType FileType { get; set; } - string Path { get; set; } - string Description { get; } - } - - public interface IController - { - int Id { get; set; } - List PlayQueue { get; set; } - void GetNextSong(); - void RemoveSong(ISong song); - void Play(); - void Pause(); - void Stop(); - void Next(); - } -} diff --git a/TestSelector/Classes/PlayerDelegates.cs b/TestSelector/Classes/PlayerDelegates.cs deleted file mode 100644 index 007f3e7..0000000 --- a/TestSelector/Classes/PlayerDelegates.cs +++ /dev/null @@ -1,39 +0,0 @@ -using KaraokePlayer.Enums; -using KaraokePlayer.Interfaces; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace KaraokePlayer.Classes -{ - public class ControllerStateChangedEventArgs: EventArgs - { - public ControllerStateChangedEventArgs(PlayerState state ) - { - State = state; - } - public PlayerState State { get; } - } - public class ControllerSongChangedEventArgs - { - public ControllerSongChangedEventArgs(ISong song) - { - ShouldPlay = true; - Song = song; - } - public ControllerSongChangedEventArgs(bool shouldPlay, ISong song) - { - ShouldPlay = shouldPlay; - Song = song; - } - public ISong Song { get; } - public bool ShouldPlay { get; } - } - - public delegate void ControllerStateChangedEventHandler(ControllerStateChangedEventArgs args); - public delegate void ControllerSongChangedEventHandler(ControllerSongChangedEventArgs args); - public delegate void ControllerPlayQueueChangedEventHandler(); - -} diff --git a/TestSelector/Form1.cs b/TestSelector/Form1.cs index dd47f9e..1db478b 100644 --- a/TestSelector/Form1.cs +++ b/TestSelector/Form1.cs @@ -1,7 +1,4 @@ -using FireSharp; -using FireSharp.Config; -using FireSharp.Interfaces; -using KaraokePlayer.Classes; +using KaraokePlayer.Classes; using KaraokePlayer.Enums; using KaraokePlayer.Interfaces; using System; @@ -117,7 +114,7 @@ namespace TestSelector song.Id = new Random().Next(0, 50000); song.Title = tag.Tag.Title; song.Artist = tag.Tag.Performers[0]; - song.Path = file.FullName; + song.Path = file.FullName.Replace(@"D:\KaraokeData\", @"Z:\"); controller.AddSongToQueue(song); } diff --git a/TestSelector/TestSelector.csproj b/TestSelector/TestSelector.csproj index 335a6ea..5d55b3e 100644 --- a/TestSelector/TestSelector.csproj +++ b/TestSelector/TestSelector.csproj @@ -33,10 +33,6 @@ 4 - - ..\packages\FireSharp.2.0.4\lib\portable-net45+sl5+wp8+win8\FireSharp.dll - True - ..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll True @@ -79,10 +75,6 @@ - - - - Form @@ -117,6 +109,12 @@ + + + {4fe25e6d-1beb-4902-9815-c2b421233bd7} + FirebaseKaraoke + + diff --git a/TestSelector/packages.config b/TestSelector/packages.config index 45a2770..b2bae57 100644 --- a/TestSelector/packages.config +++ b/TestSelector/packages.config @@ -1,6 +1,5 @@  -