aboutsummaryrefslogtreecommitdiff
path: root/src-vue/src/plugins/store.ts
diff options
context:
space:
mode:
authorRémy Raes <contact@remyraes.com>2022-10-19 14:50:20 +0200
committerGitHub <noreply@github.com>2022-10-19 14:50:20 +0200
commit4e55dce30214a426c8621c565f525303b43fbf7f (patch)
tree22a053a9f09b88190086a34c4e8295ef78f0ba53 /src-vue/src/plugins/store.ts
parent546d1908b15fc7c21b1b5f0109826fb03a5493fd (diff)
downloadFlightCore-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.ts54
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',