public static DiscogsMaster GetMasterRelease(int id) { if (!masterCache.ContainsKey(id)) { masterCache.Add(id, client.GetMasterAsync(id).Result); saveCache(masterCache, nameof(masterCache)); } return(masterCache[id]); }
private async Task <Album> GetRelease(int releaseid) { log.Trace($"Discogs: Receiving Release {releaseid}"); var release = await _discogsClient.GetMasterAsync(releaseid); var album = new Album(); album.Site = "Discogs"; var discogsImage = release.images.FirstOrDefault(i => i.type == DiscogsImageType.primary);; if (discogsImage != null) { album.LargeImageUrl = discogsImage.uri; album.CoverHeight = discogsImage.height.ToString(); album.CoverWidth = discogsImage.width.ToString(); } album.Artist = string.Join(",", release.artists.Select(a => a.name)); album.Title = release.title; album.Year = release.year.ToString(); album.DiscCount = 1; // Get the Tracks var discs = new List <List <AlbumSong> >(); var albumTracks = new List <AlbumSong>(); var numDiscs = 1; var lastPosOnAlbumSideA = 0; foreach (var track in release.tracklist) { var pos = track.position; var albumTrack = new AlbumSong(); if (string.IsNullOrEmpty(track.position) || string.IsNullOrEmpty(track.title)) { continue; } // check for Multi Disc Album if (track.position.Contains("-")) { album.DiscCount = Convert.ToInt16(track.position.Substring(0, track.position.IndexOf("-", StringComparison.Ordinal))); // Has the number of Discs changed? if (album.DiscCount != numDiscs) { numDiscs = album.DiscCount; discs.Add(new List <AlbumSong>(albumTracks)); albumTracks.Clear(); } pos = track.position.Substring(track.position.IndexOf("-", StringComparison.Ordinal) + 1); } else if (!track.position.Substring(0, 1).All(Char.IsDigit)) { // The Master Release returned was a Vinyl Album with side A and B. So we have tracks as "A1", "A2", ... "B1",.. pos = track.position.Substring(1); if (track.position.Substring(0, 1) == "A") { lastPosOnAlbumSideA = Convert.ToInt16(pos); } else { pos = (lastPosOnAlbumSideA + Convert.ToInt16(pos)).ToString(); } } albumTrack.Number = Convert.ToInt16(pos); albumTrack.Title = track.title; albumTrack.Duration = track.duration.ToString(); albumTracks.Add(albumTrack); } discs.Add(albumTracks); album.Discs = discs; log.Trace("Discogs: Finished receiving Release"); return(album); }