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();
        }
Example #2
0
        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();
        }