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); }
public ReleaseTests() { this.release = TestHelper.Get<Release>("release-get.xml"); }