private async Task LoadRecentlyPlayedAsync(CancellationToken ct) { var recentlyPlayed = await _client.GetRecentlyPlayedAsync(RecentlyPlayedQuery.Default, ct); var playedByContext = recentlyPlayed.Items.GroupBy(i => i.Context?.Uri); foreach (var playedItems in playedByContext) { var playedResult = playedItems .Select(played => new PlayableAlbumResult { Title = $"'{played.Track.Name}' by {played.Track.Artists.FirstOrDefault()?.Name}", Description = $"Last played {played.PlayedAt}", ResourceUris = new[] { played.Track.Uri }, ContextUri = played.Context?.Uri, PreviewUri = PreviewUri.Track, ArtistName = played.Track.Artists.FirstOrDefault()?.Name, ActiveTrackName = played.Track.Name }) .ToList(); Available(playedResult); var sharedContext = playedItems.FirstOrDefault().Context; if (sharedContext == null) { continue; } if (sharedContext.IsAlbum()) { // Bug reported at https://github.com/spotify/web-api/issues/836 if (sharedContext.Href.PathAndQuery.EndsWith("/null")) { var albumId = sharedContext.Uri.Split(':').LastOrDefault(); sharedContext.Href = new Uri($"{sharedContext.Href.Scheme}://{sharedContext.Href.Host}{sharedContext.Href.PathAndQuery.Replace("/null", $"/{albumId}")}"); } var album = await _client.GetAsync <Album>(sharedContext.Href.ToString(), ct); foreach (var result in playedResult) { result.AlbumName = album.Name; result.CoverArt = album.Images.FirstOrDefault(i => i.Width == 300)?.Url ?? album.Images.LastOrDefault()?.Url; result.ReleaseDate = album.ReleaseDate; Updated(result); } } else if (sharedContext.IsPlaylist()) { var playlist = await _client.GetAsync <Playlist>(sharedContext.Href.ToString(), ct); foreach (var result in playedResult) { result.AlbumName = playlist.Name; result.CoverArt = playlist.Images.FirstOrDefault()?.Url; result.ReleaseDate = playlist.Owner.Id; Updated(result); } } } }