protected void Dispose(bool disposing) { if (disposing) { _trackFetcherTimer.Stop(); _trackFetcherTimer?.Dispose(); AlbumArtwork?.Dispose(); client?.Dispose(); httpClient?.Dispose(); } }
public async Task GetAsync() { try { if (client == null) { return; } var currentTrack = await client.GetPlayingTrackAsync(); if (currentTrack.IsPlaying) { var devices = (await client.GetDevicesAsync()).Devices; if (devices.Except(AvailableSpotifyDevices).Any()) { AvailableSpotifyDevices = devices; } var currentActiveDevice = devices.Find(x => x.IsActive); if (ActiveDevice.Id != currentActiveDevice.Id) { ActiveDevice = _deiceMapper.Map <SpotifyDevice, Device>(currentActiveDevice); DeviceChanged?.Invoke(ActiveDevice); } if (currentTrack.Item != null) { Duration_ms = currentTrack.Item.DurationMs; Position_ms = currentTrack.ProgressMs; Volume = currentActiveDevice.VolumePercent; var testURL = currentTrack.Item.ExternUrls.FirstOrDefault(); var url = testURL.Equals(default(KeyValuePair <string, string>)) ? string.Empty : testURL.Value; if (Url != url) { Url = url; AlbumArtwork?.Dispose(); AlbumArtwork = null; } if (AlbumArtwork == null) { var artist = await client.GetArtistAsync(currentTrack.Item.Artists.FirstOrDefault()?.Id); if (artist != null) { Genre = artist.Genres.FirstOrDefault(); Type = artist.Type; } Track = currentTrack.Item.Name; Album = currentTrack.Item.Album.Name; var mainArtist = currentTrack.Item.Artists.First().Name; if (currentTrack.Item.Artists.Count() > 1) { var artistFeat = $@"{mainArtist} feat. "; artistFeat += string.Join(", ", currentTrack.Item.Artists.Skip(1).Select(x => x.Name)); Artist = artistFeat; } else { Artist = mainArtist; } //Lyrics = await LyricsHelpers.GetLyricsAsync(mainArtist, this.Track); if (currentTrack.Item.Album.Images.Any()) { ArtworkURL = currentTrack.Item.Album.Images[0].Url; AlbumArtwork = await GetImageAsync(ArtworkURL); } else { AlbumArtwork = new Bitmap(1, 1); } TrackChanged?.Invoke(this); } ; } else { Track = "Loading..."; Artist = "Loading..."; Album = "Loading..."; Duration_ms = 0; Position_ms = 0; Volume = 0; TrackChanged?.Invoke(this); } } if (IsPlaying != currentTrack.IsPlaying) { TrackPlayStateChanged?.Invoke(currentTrack.IsPlaying ? PlayState.Play : PlayState.Pause); } IsPlaying = currentTrack.IsPlaying; TrackDurationChanged?.Invoke(this); } catch (Exception ex) { Console.WriteLine(ex); } }