public void PlayGame(Game game) { if (!game.IsInstalled) { InstallGame(game); return; } logger.Info($"Starting {game.GetIdentifierInfo()}"); var dbGame = database.Games.Get(game.Id); if (dbGame == null) { dialogs.ShowMessage( string.Format(resources.FindString("LOCGameStartErrorNoGame"), game.Name), resources.FindString("LOCGameError"), MessageBoxButton.OK, MessageBoxImage.Error); UpdateJumpList(); return; } IGameController controller = null; try { if (game.IsRunning) { logger.Warn("Failed to start the game, game is already running."); return; } if (game.PlayAction.IsHandledByPlugin) { logger.Info("Using library plugin to start the game."); controller = controllers.GetGameBasedController(game, extensions.LibraryPlugins.Select(a => a.Value.Plugin)); } else { logger.Info("Using generic controller start the game."); controller = controllers.GetGenericGameController(game); } if (controller == null) { dialogs.ShowErrorMessage( resources.FindString("LOCErrorLibraryPluginNotFound"), resources.FindString("LOCGameError")); return; } controllers.RemoveController(game.Id); controllers.AddController(controller); UpdateGameState(game.Id, null, null, null, null, true); controller.Play(); } catch (Exception exc) when(!PlayniteEnvironment.ThrowAllErrors) { if (controller != null) { controllers.RemoveController(game.Id); UpdateGameState(game.Id, null, null, null, null, false); } logger.Error(exc, "Cannot start game: "); dialogs.ShowMessage( string.Format(resources.FindString("LOCGameStartError"), exc.Message), resources.FindString("LOCGameError"), MessageBoxButton.OK, MessageBoxImage.Error); return; } try { UpdateJumpList(); } catch (Exception exc) when(!PlayniteEnvironment.ThrowAllErrors) { logger.Error(exc, "Failed to set jump list data: "); } }
public void PlayGame(Game game) { var dbGame = database.GetGame(game.Id); if (dbGame == null) { dialogs.ShowMessage( string.Format(resources.FindString("LOCGameStartErrorNoGame"), game.Name), resources.FindString("LOCGameError"), MessageBoxButton.OK, MessageBoxImage.Error); UpdateJumpList(); return; } try { var controller = GameControllerFactory.GetGameBasedController(game, appSettings); Controllers.RemoveController(game.Id); Controllers.AddController(controller); if (game.IsInstalled) { UpdateGameState(game.Id, null, null, null, null, true); controller.Play(database.GetEmulators()); } else { InstallGame(game); return; } } catch (Exception exc) when(!PlayniteEnvironment.ThrowAllErrors) { logger.Error(exc, "Cannot start game: "); dialogs.ShowMessage( string.Format(resources.FindString("LOCGameStartError"), exc.Message), resources.FindString("LOCGameError"), MessageBoxButton.OK, MessageBoxImage.Error); return; } try { UpdateJumpList(); } catch (Exception exc) when(!PlayniteEnvironment.ThrowAllErrors) { logger.Error(exc, "Failed to set jump list data: "); } }