/// <summary> /// /// </summary> /// <param name="game"></param> /// <returns></returns> public List<MameGameRomDetails> FindMissingRoms(MameGame game) { var missing = new List<MameGameRomDetails>(); foreach (var m in game) { var searchRomResults = SearchForRom(m.RomName, m.FileSize, m.CRC); if (searchRomResults.Count == 0) { missing.Add(m); } } return missing; }
public RomDetailsView(MameGame game) { InitializeComponent(); _game = game; if (_game == null) return; _zipFileRepository = RepositoryManager.GetInstanceOf<IZipFileRepository>(); _zipFileService = ServiceManager.GetInstanceOf<IZipFileService>(); _settingsService = ServiceManager.GetInstanceOf<IMameMinerSettingsService>(); this.GameNameTextBlock.Text = _game.GameName; this.GameDescriptionTextBlock.Text = _game.GameDescription; Task.Factory.StartNew(() => { var hasDuplicates = _game.GroupBy(x => x.RomName).Any(g => g.Count() > 1); var sb = new StringBuilder(); sb.AppendLine(string.Format("Report for : {0}.", game.GameDescription)); sb.AppendLine(string.Format("Number of Players : {0}.", game.NumberOfPlayers)); sb.AppendLine("==== Report on Game ===="); sb.AppendLine(string.Format("Game Driver Status : {0}", game.GameState.ToString())); sb.AppendLine(string.Format("Bad Dump? : {0}", game.Any(g => g.BadDump))); sb.AppendLine(string.Format("Bad CRC? : {0}", game.Any(g => g.BadCRC))); sb.AppendLine(string.Format("Bad SHA1?: {0}", game.Any(g => g.BadSHA1))); if (game.Any(g => g.BadDump)) { sb.AppendLine("At least one rom in the collection is recognized as beeing a bad dump. You may not be able to run this game."); } if(game.GameState == GameWorkingStateEnum.Preliminary) { sb.AppendLine("This game is ony preliminarily developed in Mame. Do not expect it to run."); } if (hasDuplicates) { sb.AppendLine("At least one rom is a duplicate entry from listrom results. You may not be able to run this game."); } sb.AppendLine("==== Report on Roms ===="); var missing = _zipFileRepository.FindMissingRoms(game); if (missing.Any()) { foreach (var m in missing) { sb.AppendLine(string.Format("Missing Rom with name of {0}", m.RomName, m.CRC)); } sb.AppendLine("You may not be able to play a game generated with missing roms."); } else { sb.AppendLine("No roms missing."); } Dispatcher.Invoke(() => GameDetailsTextBlock.Text = sb.ToString()); }); }
/// <summary> /// /// </summary> /// <param name="game"></param> /// <returns></returns> public bool HasMissingRoms(MameGame game) { foreach (var m in game) { var searchRomResults = SearchForRom(m.RomName); if (searchRomResults.Count == 0) { return true; } } return false; }
public IEnumerable<MameGame> SearchForGame(string searchTerm, List<int> numPlayers, List<GameWorkingStateEnum> gameStates, int maxResults) { if (_gameList == null) { var gList = _communicationService.ListFull().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList(); gList.RemoveAt(0); _gameList = gList.ToArray(); } foreach (var l in _gameList.Where(g => g.ToLower().Contains(searchTerm.ToLower())).Take(maxResults)) { var entries = l.Split(new string[] { " ", " " }, StringSplitOptions.RemoveEmptyEntries); var gameName = entries[0].Trim(); var gameDescription = entries[1].Trim().Replace("\"", ""); var stateString = _communicationService.GetOverallState(gameName); GameWorkingStateEnum gameState = GameWorkingStateEnum.Good; if (stateString == "good") gameState = GameWorkingStateEnum.Good; if (stateString == "imperfect") gameState = GameWorkingStateEnum.Imperfect; if (stateString == "preliminary") gameState = GameWorkingStateEnum.Preliminary; var mameGame = new MameGame(gameName, gameDescription, _communicationService.ListRoms(gameName), _communicationService.GetNumberPlayers(gameName), gameState); if (numPlayers != null && numPlayers.Any() && !numPlayers.Contains(mameGame.NumberOfPlayers)) continue; if (gameStates != null && gameStates.Any() && !gameStates.Contains(mameGame.GameState)) continue; yield return mameGame; } }