Example #1
0
        /// <summary>
        /// Gets GameSystem from a Hyperspin Main Menu xml
        /// </summary>
        /// <param name="dbName"></param>
        /// <returns></returns>
        public override async Task <IEnumerable <GameSystem> > GetSystemsAsync(string dbName = null)
        {
            return(await Task.Run(() =>
            {
                //Set system (under Main Menu), with dbname
                if (dbName == null)
                {
                    dbName = "Main Menu";
                }
                var xmlPath = HyperspinHelper.GetDataBaseFilePath(FePath, "Main Menu", dbName);

                IList <GameSystem> systems = null;

                if (!File.Exists(xmlPath))
                {
                    throw new FileNotFoundException($"Menu Db not found. {xmlPath}");
                }

                using (XmlTextReader reader = new XmlTextReader(xmlPath))
                {
                    var menuName = Path.GetFileNameWithoutExtension(xmlPath);
                    XmlDocument xdoc = new XmlDocument();
                    xdoc.Load(xmlPath);

                    int sysCount = xdoc.SelectNodes("menu/game").Count + 1;
                    systems = new List <GameSystem>();

                    while (reader.Read())
                    {
                        if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "game"))
                        {
                            if (reader.HasAttributes)
                            {
                                var meh = reader.GetAttribute("enabled");
                                int enabled;
                                int.TryParse(reader.GetAttribute("enabled"), out enabled);
                                systems.Add(new GameSystem
                                {
                                    Name = reader.GetAttribute("name"),
                                    Enabled = Convert.ToBoolean(enabled)
                                });
                            }
                        }
                    }
                }

                return systems.AsEnumerable();
            }));
        }
Example #2
0
        /// <summary>
        /// Gets games from a Hyperspin xml
        /// </summary>
        /// <param name="dbFilePath"></param>
        /// <param name="mainMenuDb"></param>
        /// <returns></returns>
        public override async Task <IEnumerable <Game> > GetGamesAsync(string systemName, string name = null, bool mainMenuDb = false)
        {
            IEnumerable <Game> games = null;

            return(await Task.Run <IEnumerable <Game> >(() =>
            {
                var dbPath = HyperspinHelper.GetDataBaseFilePath(FePath, systemName, name);

                if (!File.Exists(dbPath))
                {
                    throw new FileNotFoundException($"Couldn't find a database file: {dbPath}");
                }

                //Create one system to add to all games
                var system = new GameSystem {
                    Name = systemName
                };

                //Setup
                var tempGamesList = new List <Game>();
                XmlDocument xdoc = new XmlDocument();

                //Load the xml
                xdoc.Load(dbPath);

                string romName = string.Empty, image = string.Empty, desc = string.Empty, cloneof = string.Empty, crc = string.Empty,
                manu = string.Empty, genre = string.Empty, rating = string.Empty;
                int enabled = 0;
                int year = 0;
                string index = string.Empty;
                var i = 0;
                var lastRom = string.Empty;

                try
                {
                    //Build the games list
                    foreach (XmlNode node in xdoc.SelectNodes("menu/game"))
                    {
                        romName = node.SelectSingleNode("@name").InnerText;

                        char s = romName[0];
                        char t;

                        if (lastRom != string.Empty)
                        {
                            t = lastRom[0];
                            if (char.ToLower(s) == char.ToLower(t))
                            {
                                index = string.Empty;
                                image = string.Empty;
                            }
                            else
                            {
                                index = "true";
                                image = char.ToLower(s).ToString();
                            }
                        }

                        if (node.SelectSingleNode("@enabled") != null)
                        {
                            if (node.SelectSingleNode("@enabled").InnerText != null)
                            {
                                enabled = Convert.ToInt32(node.SelectSingleNode("@enabled").InnerText);
                            }
                        }
                        else
                        {
                            enabled = 1;
                        }

                        if (!mainMenuDb)
                        {
                            desc = node.SelectSingleNode("description").InnerText;

                            if (node.SelectSingleNode("cloneof") != null)
                            {
                                cloneof = node.SelectSingleNode("cloneof").InnerText;
                            }
                            if (node.SelectSingleNode("crc") != null)
                            {
                                crc = node.SelectSingleNode("crc").InnerText;
                            }
                            if (node.SelectSingleNode("manufacturer") != null)
                            {
                                manu = node.SelectSingleNode("manufacturer").InnerText;
                            }
                            if (node.SelectSingleNode("year") != null)
                            {
                                if (!string.IsNullOrEmpty(node.SelectSingleNode("year").InnerText))
                                {
                                    Int32.TryParse(node.SelectSingleNode("year").InnerText, out year);
                                }
                            }

                            if (node.SelectSingleNode("genre") != null)
                            {
                                var genreName = node.SelectSingleNode("genre").InnerText;

                                genreName = genreName.Replace(@"\", "-");
                                genreName = genreName.Replace(@"/", "-");

                                genre = genreName;
                            }
                            if (node.SelectSingleNode("rating") != null)
                            {
                                rating = node.SelectSingleNode("rating").InnerText;
                            }
                        }

                        tempGamesList.Add(new Game
                        {
                            FileName = romName,
                            ShortDescription = desc,
                            Enabled = Convert.ToBoolean(enabled),
                            Genre = new Genre {
                                Name = genre
                            },
                            Title = desc,
                            Year = year,
                            Rating = rating,
                            Manufacturer = new Manufacturer {
                                Name = manu
                            },
                            System = system
                        });

                        //(name, index, image, desc, cloneof, crc, manu, year, genre, rating, enabled, _systemName));

                        lastRom = romName;
                        i++;
                    }

                    //Only sort by romname if it isn't main menu
                    if (!mainMenuDb)
                    {
                        tempGamesList.Sort((x, y) => x.FileName.CompareTo(y.FileName));
                    }

                    return tempGamesList;
                }
                catch (Exception)
                {
                    throw;
                }
            }));
        }