diff --git a/FirebaseKaraoke/FirebaseController.cs b/FirebaseKaraoke/FirebaseController.cs index 626d19e..6e52eca 100644 --- a/FirebaseKaraoke/FirebaseController.cs +++ b/FirebaseKaraoke/FirebaseController.cs @@ -39,6 +39,10 @@ namespace KaraokePlayer.Classes { get { return string.Format("controllers/{0}/player/queue/0/", this.Id); } } + private string FavoritesPath + { + get { return string.Format("controllers/{0}/favorites/", this.Id); } + } public string Id { get; set; } public Song CurrentSong { get; set; } @@ -108,13 +112,14 @@ namespace KaraokePlayer.Classes /// private void CurrentSongDidChange() { - var response = _client.Get(CurrentSongPath); + var response = _client.Get(CurrentSongPath); var item = response.ResultAs(); if (item == null) return; if (CurrentSong == null || CurrentSong.Path != item.Song.Path) { CurrentSong = item.Song; _songChanged(new ControllerSongChangedEventArgs(item.Song)); + UpdateFavorites(item.Song); } } @@ -128,5 +133,35 @@ namespace KaraokePlayer.Classes _state = newstate; _stateChanged(new ControllerStateChangedEventArgs(newstate)); } + + private void UpdateFavorites(Song song) + { + //get favorites + FavoriteSong favorite = null; + List favorites = _client.Get(FavoritesPath).ResultAs>(); + if (favorites == null) favorites = new List(); + + //unique song is based on the path + favorite = favorites.SingleOrDefault(f => f.Path == song.Path); + if (favorite == null) + { + favorite = new FavoriteSong(); + favorite.Artist = song.Artist; + favorite.Title = song.Title; + favorite.Genre = song.Genre; + favorite.Path = song.Path; + favorite.Year = song.Year; + favorite.Count = 1; + favorites.Add(favorite); + } + else { + favorite.Count += 1; + } + + //take the top 100 songs + var top100 = favorites.OrderByDescending(f => f.Count).Take(100); + _client.Set(FavoritesPath, top100); + + } } } diff --git a/Herse.Models/FavoriteSong.cs b/Herse.Models/FavoriteSong.cs new file mode 100644 index 0000000..df2eb01 --- /dev/null +++ b/Herse.Models/FavoriteSong.cs @@ -0,0 +1,15 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Herse.Models +{ + public class FavoriteSong : Song + { + [JsonProperty("count")] + public int Count { get; set; } + } +} diff --git a/Herse.Models/Herse.Models.csproj b/Herse.Models/Herse.Models.csproj index 5880b0c..f60ee6b 100644 --- a/Herse.Models/Herse.Models.csproj +++ b/Herse.Models/Herse.Models.csproj @@ -44,6 +44,7 @@ +