public static SongData CreateFromXML(Stream stream, string rootpath) { SongData data = new SongData(); XmlReader reader = XmlReader.Create(stream); XmlDocument doc = new XmlDocument(); doc.Load(reader); data.PopulateFromXML(doc.DocumentElement, rootpath); return(data); }
public void AddSongs(PlatformData data, ProgressIndicator progress) { if (Root == null) { return; } foreach (XmlNode node in Root.GetElementsByTagName("addsong")) { XmlElement element = node as XmlElement; if (element.Attributes["game"] != null && int.Parse(element.Attributes["game"].Value) != (int)data.Game) { continue; } SongData song = new SongData(data); if (element.Attributes["id"] != null) { song.ID = element.Attributes["id"].Value; } song.PopulateFromXML(element, RootPath); data.Platform.AddSong(data, song, progress); } data.Mutex.WaitOne(); IList <FormatData> songs = data.Songs; foreach (XmlNode node in Root.GetElementsByTagName("deletesong")) { XmlElement element = node as XmlElement; if (element.Attributes["game"] != null && int.Parse(element.Attributes["game"].Value) != (int)data.Game) { continue; } if (element.Attributes["id"] != null) { foreach (FormatData song in songs.Where(f => string.Compare(f.Song.ID, element.Attributes["id"].Value, true) == 0).ToList()) { data.RemoveSong(song); } } if (element.Attributes["name"] != null) { foreach (FormatData song in songs.Where(f => string.Compare(f.Song.Name, element.Attributes["name"].Value, true) == 0).ToList()) { data.RemoveSong(song); } } } data.Mutex.ReleaseMutex(); }
public bool Populate(SongData song) { bool ret = false; string idprefix = string.Empty; string nameprefix = string.Empty; string songid = song.ID; if (Root == null) { goto populateend; } foreach (XmlElement node in Root.GetElementsByTagName("global")) { song.PopulateFromXML(node as XmlElement, RootPath); ret = true; foreach (XmlElement element in node.GetElementsByTagName("idprefix")) { idprefix = element.InnerText; } foreach (XmlElement element in node.GetElementsByTagName("nameprefix")) { nameprefix = element.InnerText; } } if (songid.StartsWith(idprefix)) { songid = songid.Substring(idprefix.Length); } foreach (XmlElement element in Root.GetElementsByTagName("song")) { if (element.Attributes["game"] != null && int.Parse(element.Attributes["game"].Value) != (int)Game) { continue; } if (string.Compare(element.Attributes["id"].Value, songid, true) == 0) { song.PopulateFromXML(element, RootPath); ret = true; goto populateend; } } populateend: if (songid == song.ID) { if (idprefix.Length > 0) { song.ID = idprefix + song.ID; } if (nameprefix.Length > 0) { switch (ApplyNamePrefix) { case NamePrefix.Prefix: song.Name = nameprefix + " " + song.Name; break; case NamePrefix.Postfix: song.Name = song.Name + " " + nameprefix; break; } } } if (!song.Pack.HasValue() && song.Game != Game.Unknown) { song.Pack = Platform.GameName(song.Game); } return(ret); }