private void ReadTracks(XmlReader reader, Release release) { reader.AssertElementStart(Keys.Tracks); if (reader.IsEmptyElement) { throw new FormatException(InvalidXmlDatabase); } while (reader.Read()) { if (reader.IsElementEnd(Keys.Tracks)) { break; } if (reader.IsElementStart(Keys.Track)) { Track track = this.ReadTrack(reader); release.Tracklist.Add(track); } else { throw new FormatException(InvalidXmlDatabase); } } }
private Track ReadTrack(XmlReader reader) { reader.AssertElementStart(Keys.Track); Track track = new Track() { Disc = reader.GetAttributeInt32(Keys.Disc, 0), Position = reader.GetAttributeInt32(Keys.Position, 0), Title = reader.GetAttributeOrNull(Keys.Title), JoinedArtists = reader.GetAttributeOrNull(Keys.JoinedArtists), RelativeFilename = reader.GetAttributeOrNull(Keys.RelativeFilename), DynamicRange = reader.GetAttributeDouble(Keys.DynamicRange, double.NaN), ReplayGainTrackGain = reader.GetAttributeDouble(Keys.TrackGain, double.NaN), ReplayGainTrackPeak = reader.GetAttributeDouble(Keys.TrackPeak, double.NaN), }; if (reader.IsEmptyElement) { return(track); } while (reader.Read()) { if (reader.IsElementEnd(Keys.Track)) { break; } if (reader.IsElementStart(Keys.Artists)) { this.ReadTrackArtists(reader, track); } else { throw new FormatException(InvalidXmlDatabase); } } return(track); }
protected Release ReadRelease(XmlReader reader) { reader.AssertElementStart(Keys.Release); Release release = new Release(); release.JoinedAlbumArtists = reader.GetAttributeOrNull(Keys.JoinedAlbumArtists); release.Title = reader.GetAttributeOrNull(Keys.Title); release.ReleaseDate = ReleaseDate.Parse(reader.GetAttributeOrNull(Keys.ReleaseDate)); release.OriginalReleaseDate = ReleaseDate.Parse(reader.GetAttributeOrNull(Keys.OriginalReleaseDate)); release.CatalogNumber = reader.GetAttributeOrNull(Keys.CatalogNumber); release.Label = reader.GetAttributeOrNull(Keys.Label); release.Country = reader.GetAttributeOrNull(Keys.Country); release.FlagMessage = reader.GetAttributeOrNull(Keys.FlagMessage); release.IsFlagged = release.FlagMessage != null; release.Notes = reader.GetAttributeOrNull(Keys.Notes); release.WikipediaPageName = reader.GetAttributeOrNull(Keys.WikipediaPageName); release.DiscogsReleaseId = reader.GetAttributeInt32(Keys.DiscogsReleaseId, 0); release.DiscogsMasterId = reader.GetAttributeInt32(Keys.DiscogsMasterId, 0); release.Genre = reader.GetAttributeOrNull(Keys.Genre); release.Score = reader.GetAttributeInt32(Keys.Score, 0); release.DynamicRange = reader.GetAttributeDouble(Keys.DynamicRange, double.NaN); release.ReplayGainAlbumGain = reader.GetAttributeDouble(Keys.AlbumGain, double.NaN); release.ReplayGainAlbumPeak = reader.GetAttributeDouble(Keys.AlbumPeak, double.NaN); if (reader.GetAttributeOrNull(Keys.DateAdded) != null) { release.DateAdded = new DateTime(reader.GetAttributeInt64(Keys.DateAdded, 0)); } if (reader.GetAttributeOrNull(Keys.DateAudioModified) != null) { release.DateAudioModified = new DateTime(reader.GetAttributeInt64(Keys.DateAudioModified, 0)); } if (reader.GetAttributeOrNull(Keys.DateModified) != null) { release.DateModified = new DateTime(reader.GetAttributeInt64(Keys.DateModified, 0)); } if (reader.IsEmptyElement) { throw new FormatException(InvalidXmlDatabase); } while (reader.Read()) { if (reader.IsElementEnd(Keys.Release)) { break; } if (reader.IsElementStart(Keys.Artists)) { this.ReadArtists(reader, release); } else if (reader.IsElementStart(Keys.Tracks)) { this.ReadTracks(reader, release); } else if (reader.IsElementStart(Keys.Images)) { this.ReadImages(reader, release); } else if (reader.IsElementStart(Keys.AdditionalFiles)) { this.ReadAdditionalFiles(reader, release); } } return release; }
private Track ReadTrack(XmlReader reader) { reader.AssertElementStart(Keys.Track); Track track = new Track() { Disc = reader.GetAttributeInt32(Keys.Disc, 0), Position = reader.GetAttributeInt32(Keys.Position, 0), Title = reader.GetAttributeOrNull(Keys.Title), JoinedArtists = reader.GetAttributeOrNull(Keys.JoinedArtists), RelativeFilename = reader.GetAttributeOrNull(Keys.RelativeFilename), DynamicRange = reader.GetAttributeDouble(Keys.DynamicRange, double.NaN), ReplayGainTrackGain = reader.GetAttributeDouble(Keys.TrackGain, double.NaN), ReplayGainTrackPeak = reader.GetAttributeDouble(Keys.TrackPeak, double.NaN), }; if (reader.IsEmptyElement) { return track; } while (reader.Read()) { if (reader.IsElementEnd(Keys.Track)) { break; } if (reader.IsElementStart(Keys.Artists)) { this.ReadTrackArtists(reader, track); } else { throw new FormatException(InvalidXmlDatabase); } } return track; }
protected Release ReadRelease(XmlReader reader) { reader.AssertElementStart(Keys.Release); Release release = new Release(); release.JoinedAlbumArtists = reader.GetAttributeOrNull(Keys.JoinedAlbumArtists); release.Title = reader.GetAttributeOrNull(Keys.Title); release.ReleaseDate = ReleaseDate.Parse(reader.GetAttributeOrNull(Keys.ReleaseDate)); release.OriginalReleaseDate = ReleaseDate.Parse(reader.GetAttributeOrNull(Keys.OriginalReleaseDate)); release.CatalogNumber = reader.GetAttributeOrNull(Keys.CatalogNumber); release.Label = reader.GetAttributeOrNull(Keys.Label); release.Country = reader.GetAttributeOrNull(Keys.Country); release.FlagMessage = reader.GetAttributeOrNull(Keys.FlagMessage); release.IsFlagged = release.FlagMessage != null; release.Notes = reader.GetAttributeOrNull(Keys.Notes); release.WikipediaPageName = reader.GetAttributeOrNull(Keys.WikipediaPageName); release.DiscogsReleaseId = reader.GetAttributeInt32(Keys.DiscogsReleaseId, 0); release.DiscogsMasterId = reader.GetAttributeInt32(Keys.DiscogsMasterId, 0); release.Genre = reader.GetAttributeOrNull(Keys.Genre); release.Score = reader.GetAttributeInt32(Keys.Score, 0); release.DynamicRange = reader.GetAttributeDouble(Keys.DynamicRange, double.NaN); release.ReplayGainAlbumGain = reader.GetAttributeDouble(Keys.AlbumGain, double.NaN); release.ReplayGainAlbumPeak = reader.GetAttributeDouble(Keys.AlbumPeak, double.NaN); if (reader.GetAttributeOrNull(Keys.DateAdded) != null) { release.DateAdded = new DateTime(reader.GetAttributeInt64(Keys.DateAdded, 0)); } if (reader.GetAttributeOrNull(Keys.DateAudioModified) != null) { release.DateAudioModified = new DateTime(reader.GetAttributeInt64(Keys.DateAudioModified, 0)); } if (reader.GetAttributeOrNull(Keys.DateModified) != null) { release.DateModified = new DateTime(reader.GetAttributeInt64(Keys.DateModified, 0)); } if (reader.IsEmptyElement) { throw new FormatException(InvalidXmlDatabase); } while (reader.Read()) { if (reader.IsElementEnd(Keys.Release)) { break; } if (reader.IsElementStart(Keys.Artists)) { this.ReadArtists(reader, release); } else if (reader.IsElementStart(Keys.Tracks)) { this.ReadTracks(reader, release); } else if (reader.IsElementStart(Keys.Images)) { this.ReadImages(reader, release); } else if (reader.IsElementStart(Keys.AdditionalFiles)) { this.ReadAdditionalFiles(reader, release); } } return(release); }