コード例 #1
0
        public static DiscogsMaster GetMasterRelease(int id)
        {
            if (!masterCache.ContainsKey(id))
            {
                masterCache.Add(id, client.GetMasterAsync(id).Result);
                saveCache(masterCache, nameof(masterCache));
            }

            return(masterCache[id]);
        }
コード例 #2
0
ファイル: Discogs.cs プロジェクト: ShobikaPalani/MPTagThat-2
        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);
        }