public void ReadXml(XmlReader reader) { XPathDocument xPath = new XPathDocument(reader); XPathNavigator navigator = xPath.CreateNavigator(); XPathNodeIterator iterator = navigator.Select("//GameInfoEntries/GameInfo"); while (iterator.MoveNext()) { GameInfo entry = new GameInfo(); entry.RomPath = iterator.Current.GetAttribute("romPath", String.Empty); entry.Game = new Game(iterator.Current.GetAttribute("md5", String.Empty), entry.RomPath); if (iterator.Current.MoveToFirstChild()) { do { entry.SetValue(iterator.Current.Name, iterator.Current.InnerXml); } while (iterator.Current.MoveToNext()); } _entries.Add(entry); } }
private IEnumerable<GameInfo> FindNewGames() { List<GameInfo> newGames = new List<GameInfo>(); foreach (var path in _directoryManager.GetFilePaths(EmulationContext.Empty, GameLibraryModule.RomPathKey, GameLibraryModule.RomExtensionKey)) { if (_gameInfoEntries.ContainsGame(path)) continue; var game = new GameInfo() { RomPath = path }; game.SetValue("Name", Path.GetFileName(path)); var hashProvider = System.Security.Cryptography.MD5CryptoServiceProvider.Create(); String md5 = String.Empty; if (game.RomPath.ToLower().EndsWith(".zip")) { using (var zip = ZipFile.Read(game.RomPath)) { if (zip.EntryFileNames.Count() > 1) continue; var file = zip.Entries.First(); md5 = ByteArrayToHexString(hashProvider.ComputeHash(file.OpenReader())); } } else { using (var fs = File.OpenRead(path)) { md5 = ByteArrayToHexString(hashProvider.ComputeHash(fs)); game.Game = new Game(md5, path); } } newGames.Add(game); } return newGames; }