예제 #1
0
        public IActionResult Get()
        {
            Program.EnsureTokenUpToDate();

            var cache = Program.GetCache();

            if (cache == null || cache.Tracks == null || cache.Tracks.Count == 0)
            {
                var config = new Config().Load();

                WebClient client = new WebClient();
                client.Headers.Clear();
                client.Headers[HttpRequestHeader.Authorization] = $"Bearer {config.AccessToken}";

                var recentstr  = client.DownloadString("https://api.spotify.com/v1/me/player/recently-played?limit=50");
                var recentType = new
                {
                    items = new[] {
                        new
                        {
                            track = new
                            {
                                artists = new[]
                                {
                                    new
                                    {
                                        name = "string"
                                    }
                                },
                                name = "string"
                            }
                        }
                    }
                };

                var recent = JsonConvert.DeserializeAnonymousType(recentstr, recentType);

                History history = new History();

                foreach (var track in recent.items)
                {
                    if (!history.Tracks.Any() || !history.Tracks.Last().Name.Equals(track.track.name) || !history.Tracks.Last().Artists.Contains(track.track.artists[0].name))
                    {
                        history.Tracks.Add(new Track
                        {
                            Name       = track.track.name,
                            Artists    = track.track.artists.Select(a => a.name).ToList(),
                            YTSongLink = YouTube.GetFirstSongLink($"{track.track.name} - {track.track.artists[0].name}")
                        });
                    }
                }

                var firstcurrstr = client.DownloadString("https://api.spotify.com/v1/me/player/currently-playing");
                var currType     = new
                {
                    progress_ms = (ulong)0,
                    item        = new
                    {
                        artists = new[]
                        {
                            new
                            {
                                name = "string"
                            }
                        },
                        name = "string"
                    }
                };
                var firstcurr = JsonConvert.DeserializeAnonymousType(firstcurrstr, currType);
                System.Threading.Thread.Sleep(5);
                var secondcurrstr = client.DownloadString("https://api.spotify.com/v1/me/player/currently-playing");
                var secondcurr    = JsonConvert.DeserializeAnonymousType(secondcurrstr, currType);
                if (firstcurr != null && firstcurr.item != null && secondcurr != null && secondcurr.item != null)
                {
                    history.CurrentTrack = new Track {
                        Name       = secondcurr.item.name,
                        Artists    = secondcurr.item.artists.Select(a => a.name).ToList(),
                        IsPlaying  = (firstcurr.progress_ms != secondcurr.progress_ms),
                        YTSongLink = YouTube.GetFirstSongLink($"{secondcurr.item.name} - {secondcurr.item.artists[0].name}")
                    };
                }
                else
                {
                    history.CurrentTrack = null;
                }

                history.Tracks = history.Tracks.Take(20).ToList();

                Program.SetCache(history);
                return(new JsonResult(history));
            }
            else
            {
                return(new JsonResult(cache));
            }
        }