Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 public static void SaveMameInfo(MameInfo mameInfo)
 {
     mameInfoCollection.Delete(Query.All());
     mameInfoCollection.Insert(mameInfo);
 }
Exemplo n.º 4
0
        /// <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;
        }
Exemplo n.º 5
0
 /// <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;
 }