diff options
author | Rémy Raes <contact@remyraes.com> | 2022-10-19 14:50:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-19 14:50:20 +0200 |
commit | 4e55dce30214a426c8621c565f525303b43fbf7f (patch) | |
tree | 22a053a9f09b88190086a34c4e8295ef78f0ba53 /src-vue/src/plugins/store.ts | |
parent | 546d1908b15fc7c21b1b5f0109826fb03a5493fd (diff) | |
download | FlightCore-4e55dce30214a426c8621c565f525303b43fbf7f.tar.gz FlightCore-4e55dce30214a426c8621c565f525303b43fbf7f.zip |
feat: Manually find game if needed (#7)
* refactor: move updateGamePath method in store mutations
* feat: play button allows game path update
If game path was not found automatically and the user clicks the
play button, FlightCore will ask him to point out his Titanfall2
installation folder.
* refactor: change button text
* feat: display a notification on successful game folder selection
* feat: close permanent notification on successful game folder selection
* fix: allow game launch with UNKNOWN install type on Windows
* feat: set install type to UNKNOWN on manual folder pick
* refactor: update omni-button text when game folder wasn't found
Diffstat (limited to 'src-vue/src/plugins/store.ts')
-rw-r--r-- | src-vue/src/plugins/store.ts | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/src-vue/src/plugins/store.ts b/src-vue/src/plugins/store.ts index 647ee4e9..ce0b0ded 100644 --- a/src-vue/src/plugins/store.ts +++ b/src-vue/src/plugins/store.ts @@ -5,8 +5,10 @@ import { InstallType } from "../utils/InstallType"; import { invoke } from "@tauri-apps/api"; import { GameInstall } from "../utils/GameInstall"; import { ReleaseCanal } from "../utils/ReleaseCanal"; -import { ElNotification } from 'element-plus'; +import { ElNotification, NotificationHandle } from 'element-plus'; import { NorthstarState } from '../utils/NorthstarState'; +import { appDir } from '@tauri-apps/api/path'; +import { open } from '@tauri-apps/api/dialog'; import { Store } from 'tauri-plugin-store-api'; const persistentStore = new Store('flight-core-settings.json'); @@ -28,6 +30,8 @@ export interface FlightCoreStore { origin_is_running: boolean } +let notification_handle: NotificationHandle; + export const store = createStore<FlightCoreStore>({ state (): FlightCoreStore { return { @@ -66,6 +70,48 @@ export const store = createStore<FlightCoreStore>({ updateCurrentTab(state: any, newTab: Tabs) { state.current_tab = newTab; }, + async updateGamePath(state: FlightCoreStore) { + // Open a selection dialog for directories + const selected = await open({ + directory: true, + multiple: false, + defaultPath: await appDir(), + }); + if (Array.isArray(selected)) { + // user selected multiple directories + alert("Please only select a single directory"); + } else if (selected === null) { + // user cancelled the selection + } else { + // user selected a single directory + + // Verify if valid Titanfall2 install location + let is_valid_titanfall2_install = await invoke("verify_install_location", { gamePath: selected }) as boolean; + if (is_valid_titanfall2_install) { + state.game_path = selected; + ElNotification({ + title: 'New game folder', + message: "Game folder was successfully updated.", + type: 'success', + position: 'bottom-right' + }); + notification_handle.close(); + state.install_type = InstallType.UNKNOWN; + + // Check for Northstar install + store.commit('checkNorthstarUpdates'); + } + else { + // Not valid Titanfall2 install + ElNotification({ + title: 'Wrong folder', + message: "Selected folder is not a valid Titanfall2 install.", + type: 'error', + position: 'bottom-right' + }); + } + } + }, async launchGame(state: any) { // TODO update installation if release track was switched switch (state.northstar_state) { @@ -131,6 +177,10 @@ export const store = createStore<FlightCoreStore>({ alert(error); }); break; + + case NorthstarState.GAME_NOT_FOUND: + store.commit('updateGamePath'); + break; } } } @@ -163,7 +213,7 @@ async function _initializeApp(state: any) { .catch((err) => { // Gamepath not found or other error console.error(err); - ElNotification({ + notification_handle = ElNotification({ title: 'Titanfall2 not found!', message: "Please manually select install location", type: 'error', |