From 08224b0801f8cb53d2b1c02ad4c929503bc299a9 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Mon, 5 Sep 2016 14:18:39 -0500 Subject: [PATCH] added favorites Signed-off-by: Matt Bruce --- FirebaseKaraoke/FirebaseController.cs | 37 ++++++++++++++++++++++++++- Herse.Models/FavoriteSong.cs | 15 +++++++++++ Herse.Models/Herse.Models.csproj | 1 + 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 Herse.Models/FavoriteSong.cs diff --git a/FirebaseKaraoke/FirebaseController.cs b/FirebaseKaraoke/FirebaseController.cs index 1be1b72..cfe2110 100644 --- a/FirebaseKaraoke/FirebaseController.cs +++ b/FirebaseKaraoke/FirebaseController.cs @@ -34,6 +34,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; } @@ -92,13 +96,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); } } @@ -108,5 +113,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 cdf700d..9bf22ea 100644 --- a/Herse.Models/Herse.Models.csproj +++ b/Herse.Models/Herse.Models.csproj @@ -44,6 +44,7 @@ +