diff --git a/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileDataModel.cs b/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileDataModel.cs index 2636e797a..02bb82ca5 100644 --- a/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileDataModel.cs +++ b/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileDataModel.cs @@ -9,6 +9,7 @@ namespace Artemis.Modules.Effects.WindowsProfile public WindowsProfileDataModel() { Spotify = new Spotify(); + GooglePlayMusic = new GooglePlayMusic(); Cpu = new CpuDataModel(); Performance = new PerformanceDataModel(); CurrentTime = new CurrentTime(); @@ -17,6 +18,7 @@ namespace Artemis.Modules.Effects.WindowsProfile public CpuDataModel Cpu { get; set; } public PerformanceDataModel Performance { get; set; } public Spotify Spotify { get; set; } + public GooglePlayMusic GooglePlayMusic { get; set; } public CurrentTime CurrentTime { get; set; } } @@ -63,4 +65,39 @@ namespace Artemis.Modules.Effects.WindowsProfile public bool Playing { get; set; } public int SongLength { get; set; } } + + [MoonSharpUserData] + public class GooglePlayMusic + { + public bool playing { get; set; } + public Song song { get; set; } + public Rating rating { get; set; } + public Time time { get; set; } + public string shuffle { get; set; } + public string repeat { get; set; } + public int volume { get; set; } + } + + [MoonSharpUserData] + public class Song + { + public string title { get; set; } + public string artist { get; set; } + public string album { get; set; } + public string albumArt { get; set; } + } + + [MoonSharpUserData] + public class Rating + { + public bool liked { get; set; } + public bool disliked { get; set; } + } + + public class Time + { + public int current { get; set; } + public int total { get; set; } + } + } \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileModel.cs b/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileModel.cs index 5227ca653..fdc5f9d04 100644 --- a/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileModel.cs +++ b/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileModel.cs @@ -1,12 +1,14 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.IO; using System.Threading; using System.Threading.Tasks; using Artemis.DAL; using Artemis.Managers; using Artemis.Models; using Artemis.Profiles.Layers.Models; +using Newtonsoft.Json; using Ninject.Extensions.Logging; using SpotifyAPI.Local; @@ -20,13 +22,13 @@ namespace Artemis.Modules.Effects.WindowsProfile private PerformanceCounter _overallCpu; private SpotifyLocalAPI _spotify; private bool _spotifySetupBusy; - private DateTime _lastSpotifyUpdate; + private DateTime _lastMusicUpdate; public WindowsProfileModel(ILogger logger, MainManager mainManager) : base(mainManager, SettingsProvider.Load(), new WindowsProfileDataModel()) { _logger = logger; - _lastSpotifyUpdate = DateTime.Now; + _lastMusicUpdate = DateTime.Now; Name = "WindowsProfile"; } @@ -49,7 +51,7 @@ namespace Artemis.Modules.Effects.WindowsProfile { var dataModel = (WindowsProfileDataModel) DataModel; UpdateCpu(dataModel); - UpdateSpotify(dataModel); + UpdateMusicPlayers(dataModel); UpdateDay(dataModel); } @@ -185,13 +187,20 @@ namespace Artemis.Modules.Effects.WindowsProfile }); } - public void UpdateSpotify(WindowsProfileDataModel dataModel) + public void UpdateMusicPlayers(WindowsProfileDataModel dataModel) { // This is quite resource hungry so only update it once every two seconds - if (DateTime.Now - _lastSpotifyUpdate < TimeSpan.FromSeconds(2)) + if (DateTime.Now - _lastMusicUpdate < TimeSpan.FromSeconds(2)) return; - _lastSpotifyUpdate = DateTime.Now; + _lastMusicUpdate = DateTime.Now; + UpdateSpotify(dataModel); + UpdateGooglePlayMusic(dataModel); + } + + private void UpdateSpotify(WindowsProfileDataModel dataModel) + { + // Spotify if (!dataModel.Spotify.Running && SpotifyLocalAPI.IsSpotifyRunning()) SetupSpotify(); @@ -217,6 +226,18 @@ namespace Artemis.Modules.Effects.WindowsProfile } } + private void UpdateGooglePlayMusic(WindowsProfileDataModel dataModel) + { + // Google Play Music + var appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + if (!File.Exists(appData + @"\Google Play Music Desktop Player\json_store\playback.json")) + return; + + dataModel.GooglePlayMusic = + JsonConvert.DeserializeObject( + File.ReadAllText(appData + @"\Google Play Music Desktop Player\json_store\playback.json")); + } + #endregion } } \ No newline at end of file