Inheritance: ReleaseBase
        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);
                }
            }
        }
示例#2
0
        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;
 }
示例#4
0
        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;
        }
示例#5
0
 public string GetJoinedArtistsFixed(Release release)
 {
     return (this.track.Artists ?? release.Artists).JoinFixed();
 }
示例#6
0
        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;
        }
示例#8
0
 public string GetJoinedArtistsFixed(Release release)
 {
     return((this.track.Artists ?? release.Artists).JoinFixed());
 }
示例#9
0
 public ReleaseAggregate(Release release)
 {
     this.release = release;
 }
        public DiscogsSelectLabelWindow(Release release)
        {
            InitializeComponent();

            this.comboLabel.ItemsSource = release.Labels;
        }