/// <summary> /// Copies data over from another system /// </summary> /// <param name="system">New system</param> /// <returns></returns> public PinballXSystem Update(PinballXSystem system) { Enabled = system.Enabled; WorkingPath = system.WorkingPath; TablePath = system.TablePath; Executable = system.Executable; Parameters = system.Parameters; Type = system.Type; return(this); }
/// <summary> /// Parses all games for a given system. /// </summary> /// <remarks> /// "Parsing" means reading and unmarshalling all XML files in the /// system's database folder. /// </remarks> /// <param name="system">System to parse games for</param> /// <param name="databaseFile">If set, only parse games for given XML file</param> /// <returns>Parsed games</returns> private IEnumerable<PinballXGame> ParseGames(PinballXSystem system, string databaseFile = null) { if (system == null) { _logger.Warn("Unknown system, not parsing games."); return new List<PinballXGame>(); } _logger.Info("Parsing games at {0}", system.DatabasePath); var games = new List<PinballXGame>(); var fileCount = 0; if (_dir.Exists(system.DatabasePath)) { foreach (var filePath in _dir.GetFiles(system.DatabasePath).Where(filePath => ".xml".Equals(Path.GetExtension(filePath), StringComparison.InvariantCultureIgnoreCase))) { var currentDatabaseFile = Path.GetFileName(filePath); // if database file is specified, drop everything else if (databaseFile != null && !databaseFile.Equals(currentDatabaseFile)) { continue; } var menu = _marshallManager.UnmarshallXml(filePath); menu.Games.ForEach(game => game.DatabaseFile = currentDatabaseFile); games.AddRange(menu.Games); fileCount++; } } _logger.Debug("Parsed {0} games from {1} XML file(s) at {2}.", games.Count, fileCount, system.DatabasePath); return games; }