public DiscogsMatchWindow(ICollectionManager manager, IEnumerable<Tuple<TrackEntity, string>> tracks, Release release) { this.collectionManager = manager; this.FixNames = true; this.release = release; this.matchItems = tracks.Select(i => new MatchItem(i.Item1, i.Item2)).ToArray(); InitializeComponent(); this.listReleaseTracklist.DataContext = release; this.listReleaseTracklist.ItemsSource = release.Tracklist; this.listMatching.ItemsSource = matchItems; for (int i = 0; i < this.listReleaseTracklist.Items.Count; ++i) { Track t = (Track)this.listReleaseTracklist.Items[i]; if (this.IsValidTrack(t)) { this.listReleaseTracklist.SelectedItems.Add(t); } } }
public static Release ReadRelease(XElement release) { release.AssertName("release"); Release result = new Release(); foreach (XAttribute attr in release.Attributes()) { if (attr.Name == "id") { result.Id = int.Parse(attr.Value); } else if (attr.Name == "status") { result.Status = ParseReleaseStatus(attr.Value); } else { throw new Exception("Unknown release attribute: " + attr.Name); } } foreach (XElement e in release.Elements()) { if (e.Name == "master_id") { result.MasterId = int.Parse(e.Value); } else if (e.Name == "images") { result.Images = e.Elements().Select(img => ReadImage(img)).ToArray(); } else if (e.Name == "artists") { result.Artists = e.Elements().Select(artist => ReadReleaseArtist(artist)).ToArray(); } else if (e.Name == "title") { e.AssertOnlyText(); result.Title = e.Value; } else if (e.Name == "labels") { result.Labels = e.Elements().Select(label => ReadReleaseLabel(label)).ToArray(); } else if (e.Name == "formats") { result.Formats = e.Elements().Select(format => ReadReleaseFormat(format)).ToArray(); } else if (e.Name == "genres") { result.Genres = e.Elements().AssertNames("genre").AssertOnlyText().Select(genre => genre.Value).ToArray(); } else if (e.Name == "styles") { result.Styles = e.Elements().AssertNames("style").AssertOnlyText().Select(style => style.Value).ToArray(); } else if (e.Name == "country") { e.AssertOnlyText(); result.Country = e.Value; } else if (e.Name == "released") { e.AssertOnlyText(); result.ReleaseDate = e.Value; } else if (e.Name == "notes") { e.AssertOnlyText(); result.Notes = e.Value.TrimAndNormalizeLineEndings(); } else if (e.Name == "tracklist") { result.Tracklist = e.Elements().Select(track => ReadTrack(track)).ToArray(); } else if (e.Name == "extraartists") { result.ExtraArtists = e.Elements().Select(extraArtist => ReadExtraArtist(extraArtist)).ToArray(); } else { throw new Exception("Unknown release element: " + e.Name); } } return result; }
private void ShowRelease(Release release) { textStatus.Visibility = Visibility.Hidden; releaseViewer.Visibility = Visibility.Visible; releaseViewer.DataContext = release; }
public Release ReadRelease() { this.XmlReader.AssertElementStart("release"); Release release = new Release(); release.Id = int.Parse(this.XmlReader.GetAttribute("id")); release.Status = DataReader.ParseReleaseStatus(this.XmlReader.GetAttribute("status")); while (true) { this.XmlReader.AssertRead(); if (this.XmlReader.IsElementEnd("release")) { break; } if (this.XmlReader.IsElementStart("images")) { release.Images = this.ReadImages(); } else if (this.XmlReader.IsElementStart("artists")) { release.Artists = this.ReadReleaseArtists(); } else if (this.XmlReader.IsElementStart("title")) { this.XmlReader.AssertNonEmptyElement(); this.XmlReader.AssertRead(); release.Title = this.XmlReader.ReadContentAsString(); } else if (this.XmlReader.IsElementStart("labels")) { release.Labels = this.ReadReleaseLabels(); } else if (this.XmlReader.IsElementStart("extraartists")) { release.ExtraArtists = this.ReadExtraArtists(); } else if (this.XmlReader.IsElementStart("formats")) { release.Formats = this.ReadFormats(); } else if (this.XmlReader.IsElementStart("genres")) { release.Genres = this.ReadGenres(); } else if (this.XmlReader.IsElementStart("styles")) { release.Styles = this.ReadStyles(); } else if (this.XmlReader.IsElementStart("country")) { this.XmlReader.AssertNonEmptyElement(); this.XmlReader.AssertRead(); release.Country = this.XmlReader.ReadContentAsString(); } else if (this.XmlReader.IsElementStart("released")) { this.XmlReader.AssertNonEmptyElement(); this.XmlReader.AssertRead(); release.ReleaseDate = this.XmlReader.ReadContentAsString(); } else if (this.XmlReader.IsElementStart("notes")) { this.XmlReader.AssertNonEmptyElement(); this.XmlReader.AssertRead(); release.Notes = this.XmlReader.ReadContentAsString(); } else if (this.XmlReader.IsElementStart("master_id")) { this.XmlReader.AssertNonEmptyElement(); this.XmlReader.AssertRead(); release.MasterId = int.Parse(this.XmlReader.ReadContentAsString()); } else if (this.XmlReader.IsElementStart("data_quality")) { this.XmlReader.AssertNonEmptyElement(); this.XmlReader.AssertRead(); release.DataQuality = DataReader.ParseDataQuality(this.XmlReader.ReadContentAsString()); } else if (this.XmlReader.IsElementStart("tracklist")) { release.Tracklist = this.ReadTracklist(); } else if (this.XmlReader.IsElementStart("videos")) { release.Videos = this.ReadVideos(); } else if (this.XmlReader.IsElementStart("identifiers")) { release.Identifiers = this.ReadReleaseIdentifiers(); } else { this.ThrowInvalidFormatException(); } } return release; }
public string GetJoinedArtistsFixed(Release release) { return (this.track.Artists ?? release.Artists).JoinFixed(); }
public Release ReadRelease(JObject source) { Release release = new Release(); foreach (var item in source) { var v = item.Value; switch (item.Key) { case "id": release.Id = v.Value<int>(); break; case "status": release.Status = DataReader.ParseReleaseStatus(v.Value<string>()); break; case "videos": release.Videos = this.ReadReleaseVideos(v.Value<JArray>()); break; case "series": if (((JArray)v).Count != 0) { this.ThrowIfStrict("Unable to process \"series\" item."); } break; case "labels": release.Labels = this.ReadReleaseLabels(v.Value<JArray>()); break; case "year": // We skip year. Can extract it from release date. break; case "images": release.Images = this.ReadImages(v.Value<JArray>()); break; case "genres": release.Genres = v.ValueAsStringArray(); break; case "thumb": // We skip thumb. Can extract it from images. break; case "extraartists": release.ExtraArtists = this.ReadExtraArtists(v.Value<JArray>()); break; case "title": release.Title = v.Value<string>(); break; case "artists": release.Artists = this.ReadReleaseArtists(v.Value<JArray>()); break; case "master_id": release.MasterId = v.Value<int>(); break; case "tracklist": release.Tracklist = this.ReadReleaseTracklist(v.Value<JArray>()); break; case "styles": release.Styles = v.ValueAsStringArray(); break; case "released_formatted": // We skip released_formatted. Can extract it from released. break; case "released": release.ReleaseDate = v.Value<string>(); break; case "master_url": // We skip master_url. Can extract it from master_id. break; case "country": release.Country = v.Value<string>(); break; case "notes": release.Notes = v.Value<string>(); break; case "companies": release.Compaines = this.ReadCompanies(v.Value<JArray>()); break; case "uri": // TODO: implement model for this break; case "formats": release.Formats = this.ReadReleaseFormats(v.Value<JArray>()); break; case "resource_url": break; case "data_quality": release.DataQuality = DataReader.ParseDataQuality(v.Value<string>()); break; case "identifiers": release.Identifiers = this.ReadReleaseIdentifiers(v.Value<JArray>()); break; default: this.ThrowIfStrict("Unknown key: " + item.Key); break; } } return release; }
private bool MatchTracklist(DatabaseRelease release, Release discogsRelease) { if (release.Tracklist.Count != discogsRelease.Tracklist.Length) { return false; } int matches = 0; for (int i = 0; i < release.Tracklist.Count; ++i) { if (release.Tracklist[i].Title.ToLower() == discogsRelease.Tracklist[i].Title.ToLower()) { ++matches; } } return matches >= release.Tracklist.Count * 2 / 3; }
public string GetJoinedArtistsFixed(Release release) { return((this.track.Artists ?? release.Artists).JoinFixed()); }
public ReleaseAggregate(Release release) { this.release = release; }
public DiscogsSelectLabelWindow(Release release) { InitializeComponent(); this.comboLabel.ItemsSource = release.Labels; }