mirror of
https://github.com/hydralauncher/hydra.git
synced 2026-01-18 16:53:57 +00:00
56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
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<void> => {
|
|
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<void>((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);
|