diff --git a/src/main/services/download/download-manager.ts b/src/main/services/download/download-manager.ts index 9efe3e2e..b5508cce 100644 --- a/src/main/services/download/download-manager.ts +++ b/src/main/services/download/download-manager.ts @@ -9,6 +9,8 @@ import type { DownloadProgress } from "@types"; import { GofileApi, QiwiApi } from "../hosters"; import { GenericHttpDownloader } from "./generic-http-downloader"; import { In, Not } from "typeorm"; +import path from "path"; +import fs from "fs"; export class DownloadManager { private static currentDownloader: Downloader | null = null; @@ -85,6 +87,30 @@ export class DownloadManager { } const gameIds = seedStatus.map((status) => status.gameId); + + for (const gameId of gameIds) { + const game = await gameRepository.findOne({ + where: { id: gameId }, + }); + + if (game) { + const isNotDeleted = fs.existsSync( + path.join(game.downloadPath!, game.folderName!) + ); + + if (!isNotDeleted) { + await this.pauseSeeding(game.id); + + await gameRepository.update(game.id, { + status: "complete", + shouldSeed: false, + }); + + WindowManager.mainWindow?.webContents.send("on-hard-delete"); + } + } + } + const updateList = await gameRepository.find({ where: { id: In(gameIds), diff --git a/src/preload/index.ts b/src/preload/index.ts index 12c5054a..28d8d030 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -39,6 +39,11 @@ contextBridge.exposeInMainWorld("electron", { ipcRenderer.on("on-download-progress", listener); return () => ipcRenderer.removeListener("on-download-progress", listener); }, + onHardDelete: (cb: () => void) => { + const listener = (_event: Electron.IpcRendererEvent) => cb(); + ipcRenderer.on("on-hard-delete", listener); + return () => ipcRenderer.removeListener("on-hard-delete", listener); + }, onSeedingStatus: (cb: (value: SeedingStatus[]) => void) => { const listener = ( _event: Electron.IpcRendererEvent, diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx index 5a479879..c4124e13 100644 --- a/src/renderer/src/app.tsx +++ b/src/renderer/src/app.tsx @@ -109,6 +109,14 @@ export function App() { }; }, [clearDownload, setLastPacket, updateLibrary]); + useEffect(() => { + const unsubscribe = window.electron.onHardDelete(() => { + updateLibrary(); + }); + + return () => unsubscribe(); + }, [updateLibrary]); + useEffect(() => { const cachedUserDetails = window.localStorage.getItem("userDetails"); diff --git a/src/renderer/src/declaration.d.ts b/src/renderer/src/declaration.d.ts index 9e658463..a8027f76 100644 --- a/src/renderer/src/declaration.d.ts +++ b/src/renderer/src/declaration.d.ts @@ -55,6 +55,7 @@ declare global { onSeedingStatus: ( cb: (value: SeedingStatus[]) => void ) => () => Electron.IpcRenderer; + onHardDelete: (cb: () => void) => () => Electron.IpcRenderer; /* Catalogue */ searchGames: (query: string) => Promise;