import path from "node:path"; import fs from "node:fs"; import { getDownloadsPath } from "../helpers/get-downloads-path"; import { logger } from "@main/services"; import { registerEvent } from "../register-event"; import { GameShop } from "@types"; import { downloadsSublevel, levelKeys } from "@main/level"; const deleteGameFolder = async ( _event: Electron.IpcMainInvokeEvent, shop: GameShop, objectId: string ): Promise => { const downloadKey = levelKeys.game(shop, objectId); const download = await downloadsSublevel.get(downloadKey); if (!download?.folderName) return; const folderPath = path.join( download.downloadPath ?? (await getDownloadsPath()), download.folderName ); const metaPath = `${folderPath}.meta`; const deleteFile = async (filePath: string, isDirectory = false) => { if (fs.existsSync(filePath)) { await new Promise((resolve, reject) => { fs.rm( filePath, { recursive: isDirectory, force: true, maxRetries: 5, retryDelay: 200, }, (error) => { if (error) { logger.error(error); reject(); } resolve(); } ); }); } }; await deleteFile(folderPath, true); await deleteFile(metaPath); await downloadsSublevel.del(downloadKey); }; registerEvent("deleteGameFolder", deleteGameFolder);