diff --git a/src/main/events/library/delete-game-folder.ts b/src/main/events/library/delete-game-folder.ts index 1e98e6fe..31f3d69f 100644 --- a/src/main/events/library/delete-game-folder.ts +++ b/src/main/events/library/delete-game-folder.ts @@ -1,8 +1,6 @@ import path from "node:path"; import fs from "node:fs"; -import { In } from "typeorm"; - import { gameRepository } from "@main/repository"; import { getDownloadsPath } from "../helpers/get-downloads-path"; @@ -14,11 +12,18 @@ const deleteGameFolder = async ( gameId: number ): Promise => { const game = await gameRepository.findOne({ - where: { - id: gameId, - status: In(["removed", "complete"]), - isDeleted: false, - }, + where: [ + { + id: gameId, + isDeleted: false, + status: "removed", + }, + { + id: gameId, + progress: 1, + isDeleted: false, + }, + ], }); if (!game) return; @@ -29,22 +34,32 @@ const deleteGameFolder = async ( game.folderName ); - if (fs.existsSync(folderPath)) { - return new Promise((resolve, reject) => { - fs.rm( - folderPath, - { recursive: true, force: true, maxRetries: 5, retryDelay: 200 }, - (error) => { - if (error) { - logger.error(error); - reject(); - } - - resolve(); - } - ); - }); + if (!fs.existsSync(folderPath)) { + await gameRepository.update( + { id: gameId }, + { downloadPath: null, folderName: null } + ); } + + return new Promise((resolve, reject) => { + fs.rm( + folderPath, + { recursive: true, force: true, maxRetries: 5, retryDelay: 200 }, + (error) => { + if (error) { + logger.error(error); + reject(); + } + + resolve(); + } + ); + }).then(async () => { + await gameRepository.update( + { id: gameId }, + { downloadPath: null, folderName: null } + ); + }); } }; diff --git a/src/main/services/steam.ts b/src/main/services/steam.ts index 0f2d4987..53e243f3 100644 --- a/src/main/services/steam.ts +++ b/src/main/services/steam.ts @@ -30,6 +30,6 @@ export const getSteamAppDetails = async ( }) .catch((err) => { logger.error(err, { method: "getSteamAppDetails" }); - throw new Error(err); + return null; }); }; diff --git a/src/renderer/src/hooks/use-download.ts b/src/renderer/src/hooks/use-download.ts index 93b7fe43..d3bf2c7a 100644 --- a/src/renderer/src/hooks/use-download.ts +++ b/src/renderer/src/hooks/use-download.ts @@ -52,7 +52,6 @@ export function useDownload() { try { await window.electron.deleteGameFolder(gameId); - await window.electron.removeGame(gameId); updateLibrary(); } finally { dispatch(removeGameFromDeleting(gameId)); diff --git a/src/renderer/src/pages/downloads/downloads.tsx b/src/renderer/src/pages/downloads/downloads.tsx index b20c4dc5..1ed3a595 100644 --- a/src/renderer/src/pages/downloads/downloads.tsx +++ b/src/renderer/src/pages/downloads/downloads.tsx @@ -47,17 +47,21 @@ export function Downloads() { complete: [], }; - const result = library.reduce((prev, next) => { - if (lastPacket?.game.id === next.id) { - return { ...prev, downloading: [...prev.downloading, next] }; - } + const result = library + .filter((game) => { + return game.downloadPath; + }) + .reduce((prev, next) => { + if (lastPacket?.game.id === next.id) { + return { ...prev, downloading: [...prev.downloading, next] }; + } - if (next.downloadQueue || next.status === "paused") { - return { ...prev, queued: [...prev.queued, next] }; - } + if (next.downloadQueue || next.status === "paused") { + return { ...prev, queued: [...prev.queued, next] }; + } - return { ...prev, complete: [...prev.complete, next] }; - }, initialValue); + return { ...prev, complete: [...prev.complete, next] }; + }, initialValue); const queued = orderBy( result.queued, @@ -66,7 +70,7 @@ export function Downloads() { ); const complete = orderBy(result.complete, (game) => - game.status === "complete" ? 0 : 1 + game.progress === 1 ? 0 : 1 ); return { diff --git a/src/renderer/src/pages/game-details/hero/hero-panel-actions.tsx b/src/renderer/src/pages/game-details/hero/hero-panel-actions.tsx index 937ca613..2dbedaa1 100644 --- a/src/renderer/src/pages/game-details/hero/hero-panel-actions.tsx +++ b/src/renderer/src/pages/game-details/hero/hero-panel-actions.tsx @@ -110,11 +110,6 @@ export function HeroPanelActions() { return; } - if (game?.executablePath) { - window.electron.openGame(game.id, game.executablePath); - return; - } - const gameExecutablePath = await selectGameExecutable(); if (gameExecutablePath) window.electron.openGame(game.id, gameExecutablePath); @@ -139,6 +134,17 @@ export function HeroPanelActions() { ); + const showDownloadOptionsButton = ( + + ); + if (game?.status === "active" && game?.progress !== 1) { return ( <> @@ -188,14 +194,7 @@ export function HeroPanelActions() { if (game?.status === "removed") { return ( <> - + {showDownloadOptionsButton}