public virtual async Task ImportGames(string emulatorPath, IEnumerable <GameInfo> gameInfos, Action <GameInfo, string> callback, Action deferredCallback) { var updateGameInfos = new Queue <Action>(); await gameInfos.ParallelForEachAsync(async gameInfo => { if (gameInfo.GameId != null) { return; } var(name, region, id) = await IdentifyGame(emulatorPath, gameInfo.Path); var newInfo = new GameInfo(gameInfo) { DisplayName = name, Region = region, GameId = id != "???" ? id : null }; var cover = await coverService.GetCoverForGame(newInfo); updateGameInfos.Enqueue(() => { gameLibraryService.UpdateGameInfo(newInfo.Name, newInfo, shouldReloadLibrary: true); remoteConfigService.ImportConfig(newInfo.GameId, emulatorPath); }); callback.Invoke(newInfo, cover); }, maxDegreeOfParallelism : 20); while (updateGameInfos.Count > 0) { updateGameInfos.Dequeue()?.Invoke(); } deferredCallback?.Invoke(); }
private void ImportConfig(object sender, RoutedEventArgs e) { var configName = configSelection.Text; if (string.IsNullOrWhiteSpace(configName)) { MessageBox.Show("No Config Selected", "Error"); return; } if (gameSelection.SelectedItems.Count == 0 && !importForAll.IsChecked.Value) { MessageBox.Show("No Game(s) Selected to Import Config to", "Error"); return; } var gameIds = Enumerable.Empty <string>(); gameIds = !importForAll.IsChecked.Value ? gameSelection.SelectedItems.Cast <Tuple <string, GameInfo> >().Select(selection => selection.Item2.GameId) : gameIds; var versionToUse = versionSelector?.Invoke(); if (versionToUse == null) { MessageBox.Show("No PCSX2 Version is Installed", "Error"); return; } var emulatorPath = settings.Versions[versionToUse]; remoteConfigService.ImportConfig(configName, emulatorPath, gameIds); GameModel.Configs = settings.Configs.Keys; Close(); }