public async void RefreshGames() { try { var xmlParser = new XmlParser(); if (!File.Exists(Resources.DB_NAME) && !string.IsNullOrEmpty(Settings.Default.MAME_EXE)) { updating = true; xmlParser.MakeQuickDat(); _mameInfo = xmlParser.MameInfo; SettingsManager.MameCommands = _mameInfo.Commands; updateList(xmlParser.Games); var progress = new Progress <int>(); progress.ProgressChanged += Progress_ProgressChanged; await Task.Factory.StartNew(() => xmlParser.MakeDat(progress)); updateList(xmlParser.Games); UpdateTitleBar(); updating = false; } else { xmlParser.ReadDat(); _mameInfo = xmlParser.MameInfo; SettingsManager.MameCommands = _mameInfo.Commands; updateList(xmlParser.Games); } } catch (Exception ex) { Logger.WriteToLog(ex); } //Now that we know where MAME is we can load the default art assets _gameList.LoadDefaultArtAssets(); UpdateTitleBar(); }
private void DrawTextInfo(Graphics g) { if (SelectedGame == null) { return; } string gameName = SelectedGame.IsParent ? SelectedGame.Name : SelectedGame.ParentSet; int maxRows = 0; int chars; Info info = new Info(); string text = ""; StringFormat stringFormat = new StringFormat(); //Calculate the Area to draw the text in. SizeF size = new SizeF((float)ClientRectangle.Width / 2, 100000); ; RectangleF rectangleF = new RectangleF(((float)ClientRectangle.Width / 2), ArtOffset, ((float)ClientRectangle.Width / 2) - ArtOffset, ClientRectangle.Height - ArtOffset * 2); //Find out if we are reading MameInfo or History string textType = Path.GetFileNameWithoutExtension(SettingsManager.ArtPaths[ArtType]); if (textType.Equals("mameinfo", StringComparison.InvariantCultureIgnoreCase)) { if (MameInfo == null) { MameInfo = new InfoParser(SettingsManager.ArtPaths[ArtType]); } if (!MameInfo.Contains(gameName.Replace("fav_", ""))) { return; } info = MameInfo[gameName.Replace("fav_", "")]; } else if (textType.Equals("history", StringComparison.InvariantCultureIgnoreCase)) { if (History == null) { History = new InfoParser(SettingsManager.ArtPaths[ArtType]); } if (!History.Contains(gameName.Replace("fav_", ""))) { return; } info = History[gameName.Replace("fav_", "")]; } else { return; } _currentInfo = info; text = GetShortInfoText(); _currentInfoText = text; g.MeasureString(text, Settings.Default.info_font, size, stringFormat, out chars, out maxRows); g.DrawString(text, Settings.Default.info_font, new SolidBrush(Settings.Default.info_font_color), rectangleF, stringFormat); _imageArea = new Rectangle((int)rectangleF.X, (int)rectangleF.Y, (int)rectangleF.Width, (int)rectangleF.Height); info.TotalRows = maxRows; info.VisibleRows = GetVisibleRows(_currentInfoText); }
public static void SaveMameInfo(MameInfo mameInfo) { mameInfoCollection.Delete(Query.All()); mameInfoCollection.Insert(mameInfo); }
/// <summary> /// Read basic game and clone info from MAME and create our initial gamelist & database. /// </summary> public void MakeQuickDat() { _mameInfo = CreateMameInfo(); SettingsManager.MameCommands = _mameInfo.Commands; var machinesDictionary = new Dictionary <string, Machine>(); var clonesDictionary = new Dictionary <string, List <string> >(); var clonesHashtable = new Hashtable(); using (StreamReader listClones = ExecuteMameCommand("-listclones").StandardOutput) { // Read the header line. var line = listClones.ReadLine(); var regex = new Regex(@"^(\S+)\s+(\S+)\s*$"); while ((line = listClones.ReadLine()) != null) { var match = regex.Match(line); var clone = match.Groups[1].Value; var parent = match.Groups[2].Value; clonesHashtable.Add(clone, true); if (clonesDictionary.ContainsKey(parent)) { clonesDictionary[parent].Add(clone); } else { clonesDictionary.Add(parent, new List <string>() { clone }); } } } using (StreamReader listFull = ExecuteMameCommand("-listfull").StandardOutput) { // Read the header line. var line = listFull.ReadLine(); var regex = new Regex(@"^(\S*)\s+""(.*)""$"); while ((line = listFull.ReadLine()) != null) { var match = regex.Match(line); var name = match.Groups[1].Value; var description = match.Groups[2].Value; machinesDictionary.Add(name, new Machine() { description = description, name = name }); } } var sortedParents = machinesDictionary.Values.Where(x => !clonesHashtable.ContainsKey(x.name)).OrderBy(x => x.description); var results = new List <Machine>(); foreach (var parent in sortedParents) { results.Add(parent); if (clonesDictionary.ContainsKey(parent.name)) { foreach (var clone in clonesDictionary[parent.name]) { machinesDictionary[clone].cloneof = parent.name; results.Add(machinesDictionary[clone]); } } } DatabaseManager.SaveMachines(results); DatabaseManager.SaveMameInfo(_mameInfo); _games = CreateGamesFromMachines(results); _games.TotalGames = results.Count; }
/// <summary> /// Reads the IV/Play Data file, technically should work with a compressed mame data file as well. /// </summary> public void ReadDat() { _games = CreateGamesFromMachines(DatabaseManager.GetMachines()); _mameInfo = DatabaseManager.GetMameInfo(); SettingsManager.MameCommands = _mameInfo.Commands; }