diff --git a/src/main/entity/index.ts b/src/main/entity/index.ts index 4d358726..9cb4f044 100644 --- a/src/main/entity/index.ts +++ b/src/main/entity/index.ts @@ -4,3 +4,4 @@ export * from "./user-preferences.entity"; export * from "./game-shop-cache.entity"; export * from "./download-source.entity"; export * from "./download-queue.entity"; +export * from "./user-auth"; diff --git a/src/main/events/auth/sign-out.ts b/src/main/events/auth/sign-out.ts index dafce7ad..b8b6cecd 100644 --- a/src/main/events/auth/sign-out.ts +++ b/src/main/events/auth/sign-out.ts @@ -1,11 +1,29 @@ -import { gameRepository, userAuthRepository } from "@main/repository"; import { registerEvent } from "../register-event"; -import { HydraApi } from "@main/services/hydra-api"; +import { DownloadManager, HydraApi, gamesPlaytime } from "@main/services"; +import { dataSource } from "@main/data-source"; +import { DownloadQueue, Game, UserAuth } from "@main/entity"; + +const signOut = async (_event: Electron.IpcMainInvokeEvent) => { + const databaseOperations = dataSource.transaction( + async (transactionalEntityManager) => { + await transactionalEntityManager.getRepository(DownloadQueue).delete({}); + + await transactionalEntityManager.getRepository(Game).delete({}); + + await transactionalEntityManager + .getRepository(UserAuth) + .delete({ id: 1 }); + } + ); + + /* Removes all games being played */ + gamesPlaytime.clear(); + + /* Disconnects aria2 */ + DownloadManager.disconnect(); -const signOut = async (_event: Electron.IpcMainInvokeEvent): Promise => { await Promise.all([ - userAuthRepository.delete({ id: 1 }), - gameRepository.delete({}), + databaseOperations, HydraApi.post("/auth/logout").catch(), ]); }; diff --git a/src/main/events/library/remove-game-from-library.ts b/src/main/events/library/remove-game-from-library.ts index 5d154aae..d7874b8f 100644 --- a/src/main/events/library/remove-game-from-library.ts +++ b/src/main/events/library/remove-game-from-library.ts @@ -1,7 +1,6 @@ import { registerEvent } from "../register-event"; import { gameRepository } from "../../repository"; -import { HydraApi } from "@main/services/hydra-api"; -import { logger } from "@main/services"; +import { HydraApi, logger } from "@main/services"; const removeGameFromLibrary = async ( _event: Electron.IpcMainInvokeEvent, diff --git a/src/main/events/misc/is-user-logged-in.ts b/src/main/events/misc/is-user-logged-in.ts index d1874b01..f5f79e15 100644 --- a/src/main/events/misc/is-user-logged-in.ts +++ b/src/main/events/misc/is-user-logged-in.ts @@ -1,5 +1,5 @@ import { registerEvent } from "../register-event"; -import { HydraApi } from "@main/services/hydra-api"; +import { HydraApi } from "@main/services"; const isUserLoggedIn = async (_event: Electron.IpcMainInvokeEvent) => { return HydraApi.isLoggedIn(); diff --git a/src/main/events/profile/get-me.ts b/src/main/events/profile/get-me.ts index d68e5c81..1225551c 100644 --- a/src/main/events/profile/get-me.ts +++ b/src/main/events/profile/get-me.ts @@ -1,5 +1,5 @@ import { registerEvent } from "../register-event"; -import { HydraApi } from "@main/services/hydra-api"; +import { HydraApi } from "@main/services"; import { UserProfile } from "@types"; import { userAuthRepository } from "@main/repository"; import { logger } from "@main/services"; diff --git a/src/main/events/profile/update-profile.ts b/src/main/events/profile/update-profile.ts index 68d18c1b..fbed0606 100644 --- a/src/main/events/profile/update-profile.ts +++ b/src/main/events/profile/update-profile.ts @@ -1,5 +1,5 @@ import { registerEvent } from "../register-event"; -import { HydraApi } from "@main/services/hydra-api"; +import { HydraApi } from "@main/services"; import axios from "axios"; import fs from "node:fs"; import path from "node:path"; diff --git a/src/main/events/user/get-user.ts b/src/main/events/user/get-user.ts index 65d3e9e0..596df084 100644 --- a/src/main/events/user/get-user.ts +++ b/src/main/events/user/get-user.ts @@ -1,5 +1,5 @@ import { registerEvent } from "../register-event"; -import { HydraApi } from "@main/services/hydra-api"; +import { HydraApi } from "@main/services"; import { steamGamesWorker } from "@main/workers"; import { UserProfile } from "@types"; import { convertSteamGameToCatalogueEntry } from "../helpers/search-games"; diff --git a/src/main/repository.ts b/src/main/repository.ts index af6ebcbd..4464e775 100644 --- a/src/main/repository.ts +++ b/src/main/repository.ts @@ -6,8 +6,8 @@ import { GameShopCache, Repack, UserPreferences, + UserAuth, } from "@main/entity"; -import { UserAuth } from "./entity/user-auth"; export const gameRepository = dataSource.getRepository(Game); diff --git a/src/main/services/download-manager.ts b/src/main/services/download-manager.ts index 2a7532a4..379e25cd 100644 --- a/src/main/services/download-manager.ts +++ b/src/main/services/download-manager.ts @@ -50,6 +50,7 @@ export class DownloadManager { public static disconnect() { if (this.aria2c) { this.aria2c.kill(); + this.connected = false; } } diff --git a/src/main/services/index.ts b/src/main/services/index.ts index c30fbfe2..42017774 100644 --- a/src/main/services/index.ts +++ b/src/main/services/index.ts @@ -8,3 +8,4 @@ export * from "./how-long-to-beat"; export * from "./process-watcher"; export * from "./main-loop"; export * from "./repacks-manager"; +export * from "./hydra-api"; diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts index fc97ff40..f20b4128 100644 --- a/src/main/services/process-watcher.ts +++ b/src/main/services/process-watcher.ts @@ -7,7 +7,7 @@ import { WindowManager } from "./window-manager"; import { createGame, updateGamePlaytime } from "./library-sync"; import { GameRunning } from "@types"; -const gamesPlaytime = new Map< +export const gamesPlaytime = new Map< number, { lastTick: number; firstTick: number } >(); diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx index d98f1e1f..0f9d3972 100644 --- a/src/renderer/src/app.tsx +++ b/src/renderer/src/app.tsx @@ -96,11 +96,11 @@ export function App() { window.electron.isUserLoggedIn().then((isLoggedIn) => { if (isLoggedIn) { fetchUserDetails().then((response) => { - if (response) setUserDetails(response); + if (response) updateUserDetails(response); }); } }); - }, [dispatch, fetchUserDetails]); + }, [fetchUserDetails, updateUserDetails, dispatch]); const onSignIn = useCallback(() => { fetchUserDetails().then((response) => {