public void Update(PinballXGame newGame) { FileName = newGame.FileName; Description = newGame.Description; Manufacturer = newGame.Manufacturer; Year = newGame.Year; Type = newGame.Type; HideDmd = newGame.HideDmd; HideBackglass = newGame.HideBackglass; Enabled = newGame.Enabled; Rating = newGame.Rating; AlternateExe = newGame.AlternateExe; SendKeysOnStart = newGame.SendKeysOnStart; }
public PinballXGame AddGame(PinballXGame game, string databasePath) { // read current xml var xmlPath = Path.Combine(databasePath, _settingsManager.Settings.XmlFile[Platform.PlatformType.VP] + ".xml"); // todo make platform dynamic if (_settingsManager.Settings.ReformatXml || !_file.Exists(xmlPath)) { var menu = _marshallManager.UnmarshallXml(xmlPath); // add game menu.Games.Add(game); // save xml _marshallManager.MarshallXml(menu, xmlPath); } else { var xml = _file.ReadAllText(xmlPath); var ns = new XmlSerializerNamespaces(); ns.Add("", ""); using (var writer = new StringWriter()) { // find out how the xml is indented var match = Regex.Match(xml, "[\n\r]([ \t]+)<", RegexOptions.Multiline | RegexOptions.IgnoreCase); var indentChars = match.Success ? match.Groups[1].ToString() : " "; // find the position where to insert game if (xml.IndexOf("</menu", StringComparison.OrdinalIgnoreCase) < 0) { xml = "<menu>\n\n</menu>"; } // serialize game as xml using (var xw = XmlWriter.Create(writer, new XmlWriterSettings { IndentChars = indentChars, Indent = true })) { var serializer = new XmlSerializer(typeof(PinballXGame)); serializer.Serialize(xw, game, ns); var xmlGame = string.Join("\n", writer .ToString() .Split('\n') .Select(line => line.StartsWith("<?xml") ? "" : line) .Select(line => indentChars + line) .ToList()) + "\n"; var pos = xml.LastIndexOf("</menu", StringComparison.OrdinalIgnoreCase); // insert game xml = xml.Substring(0, pos) + xmlGame + xml.Substring(pos); // write back to disk _file.WriteAllText(xmlPath, xml); _logger.Info("Appended game \"{0}\" to {1}", game.Description, xmlPath); } } } return game; }