From afb39572667572716499c1c163ee1ae6c2d8026f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antti=20M=C3=A4ki?= Date: Fri, 7 Oct 2022 10:45:25 +0300 Subject: [PATCH] Refactor populating the attributes of GameSelectionScreen pre-mount Extract any logic out of the component, only setting the attributes by calling helper methods. Clean up unnecessary code and attempt to simplify the implementation. Refs TS-1138 --- src/model/game/GameManager.ts | 6 ++++ src/pages/GameSelectionScreen.vue | 46 ++++++++------------------ src/r2mm/manager/SettingsDexieStore.ts | 2 +- src/utils/ManagerUtils.ts | 18 ++++++++++ 4 files changed, 38 insertions(+), 34 deletions(-) create mode 100644 src/utils/ManagerUtils.ts diff --git a/src/model/game/GameManager.ts b/src/model/game/GameManager.ts index 07c3f8b37..6f5546722 100644 --- a/src/model/game/GameManager.ts +++ b/src/model/game/GameManager.ts @@ -319,4 +319,10 @@ export default class GameManager { public static unsetGame(): Game { return this._gameList.find(value => value.internalFolderName === "RiskOfRain2")!; } + + public static findByFolderName(name?: string|null) { + return name + ? this._gameList.find((game) => game.internalFolderName === name) + : undefined; + } } diff --git a/src/pages/GameSelectionScreen.vue b/src/pages/GameSelectionScreen.vue index 800fb01f7..906494a73 100644 --- a/src/pages/GameSelectionScreen.vue +++ b/src/pages/GameSelectionScreen.vue @@ -183,6 +183,7 @@ import Hero from '../components/Hero.vue'; import PathResolver from '../r2mm/manager/PathResolver'; import * as path from 'path'; import FileUtils from '../utils/FileUtils'; +import * as ManagerUtils from '../utils/ManagerUtils'; import ManagerSettings from '../r2mm/manager/ManagerSettings'; import { StorePlatform } from '../model/game/StorePlatform'; import { GameSelectionDisplayMode } from '../model/game/GameSelectionDisplayMode'; @@ -389,41 +390,20 @@ export default class GameSelectionScreen extends Vue { await this.$store.dispatch('checkMigrations'); this.runningMigration = false; - ManagerSettings.getSingleton(GameManager.unsetGame()).then(settings => { - const lastSelectedGame = settings.getContext().global.lastSelectedGame; - const savedViewMode = settings.getContext().global.gameSelectionViewMode; - switch (savedViewMode) { - case "List": this.viewMode = GameSelectionViewMode.LIST; break; - case "Card": - case undefined: - this.viewMode = GameSelectionViewMode.CARD; - break; - } - if (lastSelectedGame !== null) { - const game = GameManager.gameList.find(value => value.internalFolderName === lastSelectedGame); - if (game !== undefined) { - this.selectedGame = game; - } - } - }); - ManagerSettings.getSingleton(GameManager.unsetGame()).then(value => { - this.settings = value; - this.favourites = value.getContext().global.favouriteGames || []; - if (value.getContext().global.defaultGame !== undefined) { - if (value.getContext().global.defaultStore !== undefined) { - const game = GameManager.gameList - .find(value1 => value1.internalFolderName === value.getContext().global.defaultGame)!; - - const platform = game.storePlatformMetadata.find(value1 => value1.storePlatform === value.getContext().global.defaultStore)!; + this.settings = await ManagerSettings.getSingleton(GameManager.unsetGame()); + const globalSettings = this.settings.getContext().global; + this.viewMode = globalSettings.gameSelectionViewMode; + this.favourites = globalSettings.favouriteGames ?? []; + this.selectedGame = GameManager.findByFolderName(globalSettings.lastSelectedGame) ?? null; - this.selectedGame = game; - this.selectedPlatform = platform.storePlatform; + // Skip game selection view if valid default game & platform are set. + const {defaultGame, defaultPlatform} = ManagerUtils.getDefaults(this.settings); - this.proceed(); - return; - } - } - }); + if (defaultGame && defaultPlatform) { + this.selectedGame = defaultGame; + this.selectedPlatform = defaultPlatform; + this.proceed(); + } } toggleViewMode() { diff --git a/src/r2mm/manager/SettingsDexieStore.ts b/src/r2mm/manager/SettingsDexieStore.ts index 860574647..66bab4f2f 100644 --- a/src/r2mm/manager/SettingsDexieStore.ts +++ b/src/r2mm/manager/SettingsDexieStore.ts @@ -206,7 +206,7 @@ export interface ManagerSettingsInterfaceGlobal_V2 { favouriteGames: string[] | undefined; defaultGame: string | undefined; defaultStore: StorePlatform | undefined; - gameSelectionViewMode: string | undefined; + gameSelectionViewMode: GameSelectionViewMode; } /** diff --git a/src/utils/ManagerUtils.ts b/src/utils/ManagerUtils.ts new file mode 100644 index 000000000..cac909a4c --- /dev/null +++ b/src/utils/ManagerUtils.ts @@ -0,0 +1,18 @@ +import GameManager from "../model/game/GameManager"; +import ManagerSettings from "../r2mm/manager/ManagerSettings"; + + +/** + * Return default game selection needed to skip the game selection screen. + */ +export const getDefaults = (settings: ManagerSettings) => { + const globals = settings.getContext().global; + const defaultGame = GameManager.findByFolderName(globals.defaultGame); + const platforms = defaultGame ? defaultGame.storePlatformMetadata : []; + const defaultPlat = platforms.find(x => x.storePlatform === globals.defaultStore); + + return { + defaultGame, + defaultPlatform: defaultPlat ? defaultPlat.storePlatform : undefined + }; +}