コード例 #1
0
ファイル: PinballXGame.cs プロジェクト: xantari/agent
 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;
 }
コード例 #2
0
ファイル: MenuManager.cs プロジェクト: freezy/vpdb-agent
        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;
        }