Inheritance: System.Entity
示例#1
0
		public AlbumInfo(string a, Release r, Medium m) : this() {
			Title = r.Title;
			Artist = a;
			if (r.Date != null) {
				Match y = Regex.Match(r.Date, @"\d+");
				if (y.Success)
					Year = uint.Parse(y.Value);
			}
			ReleaseId = r.Id;
			foreach (Hqub.MusicBrainz.API.Entities.Track t in m.Tracks.Items) {
				Tracks.Add(new Track(this, t));
			}
		}
        public override async Task <(bool Changed, SongData song)> Execute(SongData song)
        {
            log.Info($"Auto Tag: Processing file: {song.FullFileName}");
            var recordings = await GetRecordings(song.FullFileName);

            if (recordings.Count == 0)
            {
                log.Info("Auto Tag: Couldn't identify song");
                return(false, song);
            }

            var releases = new List <Release>();
            // We might get back a lot of Recordings, so condense the list to recordings, which have
            // the same duration
            var tmpRecordings = new List <MusicBrainzRecording>();

            foreach (var recording in recordings)
            {
                if (recording.Length != null)
                {
                    var timeDiff = Math.Abs(song.DurationTimespan.TotalMilliseconds / 1000 - (int)recording.Length / 1000);
                    if (timeDiff <= 5)
                    {
                        foreach (var release in recording.Releases)
                        {
                            releases.Add(release);
                            var mbRecording = new MusicBrainzRecording
                            {
                                Id         = recording.Id,
                                TrackId    = release.Media[0].Tracks[0].Id,
                                Title      = recording.Title,
                                Duration   = $"{TimeSpan.FromMilliseconds((int) recording.Length).Hours:D2}:{TimeSpan.FromMilliseconds((int) recording.Length).Minutes:D2}:{TimeSpan.FromMilliseconds((int) recording.Length).Seconds:D2}",
                                AlbumId    = release.Id,
                                ArtistId   = (recording.Credits != null && recording.Credits.Count > 0) ? recording.Credits[0].Artist.Id : "",
                                AlbumTitle = release.Title,
                                Country    = release.Country,
                                Date       = release.Date
                            };
                            mbRecording.Artist = JoinArtists(recording.Credits);
                            tmpRecordings.Add(mbRecording);
                        }
                    }
                }
            }

            var selectedRecording = new MusicBrainzRecording();
            var albumFound        = false;

            // We have already a Album from a previous search. Check,is this is found in the
            // releases from this song
            if (_album != null)
            {
                var release = releases.FirstOrDefault(r => r.Id == _album.Id);
                if (release != null && release.Id != String.Empty)
                {
                    selectedRecording = tmpRecordings.First(r => r.AlbumId == release.Id);
                    _album            = release;
                    albumFound        = true;
                }
            }

            if (!albumFound)
            {
                // And now we remove duplicate Recordings and Countries
                var condensedRecordings = tmpRecordings
                                          .GroupBy(r => new { r.AlbumTitle, r.Country })
                                          .Select(g => g.First())
                                          .ToList();

                var dialogResult = ButtonResult.None;
                var parameters   = new DialogParameters {
                    { "recordings", condensedRecordings }
                };
                DialogService.ShowDialogInAnotherWindow("IdentifySongView", "DialogWindowView", parameters, r =>
                {
                    dialogResult = r.Result;
                    if (dialogResult == ButtonResult.OK)
                    {
                        r.Parameters.TryGetValue("selectedrecording", out selectedRecording);
                    }
                });
            }

            if (selectedRecording.Id != string.Empty)
            {
                if (!albumFound)
                {
                    _album = await GetAlbum(selectedRecording.AlbumId);
                }

                song.Title       = selectedRecording.Title;
                song.Artist      = selectedRecording.Artist;
                song.AlbumArtist = _album.Credits != null?JoinArtists(_album.Credits) : "";

                song.Album = _album.Title;
                if (_album.Date != null && _album.Date.Length >= 4)
                {
                    song.Year = Convert.ToInt32(_album.Date.Substring(0, 4));
                }

                if (_album.Media != null && _album.Media.Count > 0)
                {
                    song.DiscNumber        = (uint)_album.Media[0].Position;
                    song.TrackCount        = (uint)_album.Media[0].TrackCount;
                    song.TrackNumber       = (uint)_album.Media[0].Tracks.First(t => t.Id == selectedRecording.TrackId).Position;
                    song.MusicBrainzDiscId = _album.Media[0].Discs != null ? _album.Media[0].Discs[0].Id : "";
                }

                // MusicBrainz Properties
                song.MusicBrainzArtistId       = selectedRecording.ArtistId;
                song.MusicBrainzReleaseId      = selectedRecording.AlbumId;
                song.MusicBrainzTrackId        = selectedRecording.TrackId;
                song.MusicBrainzReleaseCountry = selectedRecording.Country;
            }

            var coverArtUrl = _album.CoverArtArchive != null && _album.CoverArtArchive.Front
        ? string.Format(@"http://coverartarchive.org/release/{0}/front.jpg", _album.Id)
        : null;

            if (coverArtUrl != null)
            {
                _pic = new Picture();
                if (_pic.ImageFromUrl(coverArtUrl))
                {
                    song.Pictures.Clear();
                    song.Pictures.Add(_pic);
                }
            }

            return(true, song);
        }
        private async Task <Release> GetAlbum(string releaseID)
        {
            var release = await Release.GetAsync(releaseID, new[] { "recordings" });

            return(release);
        }
示例#4
0
 public ReleaseTests()
 {
     this.release = TestHelper.Get<Release>("release-get.xml");
 }