From 0b7272b4ba6b672fd590d60e7ce996303aa9f057 Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Sat, 18 Jan 2025 01:09:19 +0100 Subject: [PATCH] Merge pull request #746 from Zagrios/bugfix/clear-ipa-folder-when-installing-bsipa [bugfix] clear the IPA folder when installing BSIPA (cherry picked from commit bacead72aea6fe773ddb47c7220eb9e968022e68) --- .../services/mods/bs-mods-manager.service.ts | 45 ++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/src/main/services/mods/bs-mods-manager.service.ts b/src/main/services/mods/bs-mods-manager.service.ts index 09016cf8..4e3a01c1 100644 --- a/src/main/services/mods/bs-mods-manager.service.ts +++ b/src/main/services/mods/bs-mods-manager.service.ts @@ -13,8 +13,9 @@ import { deleteFolder, pathExist, unlinkPath } from "../../helpers/fs.helpers"; import { lastValueFrom } from "rxjs"; import recursiveReadDir from "recursive-readdir"; import { sToMs } from "../../../shared/helpers/time.helpers"; -import { pathExistsSync } from "fs-extra"; import { BsmZipExtractor } from "../../models/bsm-zip-extractor.class"; +import { pathExistsSync, readdirSync, rm, unlink } from "fs-extra"; +import { tryit } from "shared/helpers/error.helpers"; import crypto from "crypto"; import { BbmCategories, BbmFullMod, BbmModVersion } from "../../../shared/models/mods/mod.interface"; @@ -190,6 +191,12 @@ export class BsModsManagerService { log.info("INSTALL MOD", mod.mod.name, "for version", `${version.BSVersion} - ${version.name}`); this.utilsService.ipcSend("mod-installed", { success: true, data: { name: mod.mod.name, progression: ((this.nbInstalledMods + 1) / this.nbModsToInstall) * 100 } }); + const isBSIPA = mod.mod.name.toLowerCase() === "bsipa"; + + if(isBSIPA){ + await this.clearIpaFolder(version).catch(e => log.error("Error while clearing IPA folder", e)); + } + const downloadUrl = this.getModDownload(mod.version); if (!downloadUrl) { @@ -218,7 +225,6 @@ export class BsModsManagerService { } const versionPath = await this.bsLocalService.getVersionPath(version); - const isBSIPA = mod.mod.name.toLowerCase() === "bsipa"; const destDir = isBSIPA ? versionPath : path.join(versionPath, ModsInstallFolder.PENDING); log.info("Start extracting mod zip", mod.mod.name, "to", destDir); @@ -268,6 +274,41 @@ export class BsModsManagerService { ); } + private async clearIpaFolder(version: BSVersion): Promise { + log.info("Clearing IPA folder"); + + const versionPath = await this.bsLocalService.getVersionPath(version); + const ipaPath = path.join(versionPath, ModsInstallFolder.IPA); + + if(!pathExistsSync(ipaPath)){ + log.info("IPA folder does not exist, skipping"); + return; + } + + const contents = readdirSync(ipaPath, { withFileTypes: true }); + + for(const content of contents){ + + if (content.name === 'Backups' || content.name === 'Pending') { + continue; + } + + const contentPath = path.join(ipaPath, content.name); + + const res = await tryit(() => content.isDirectory() ? ( + rm(contentPath, { force: true, recursive: true }) + ) : ( + unlink(contentPath) + )); + + if(res.error){ + log.error("Error while clearing IPA folder content", content.name, res.error); + } + } + + log.info("IPA folder cleared successfully"); + } + private async uninstallBSIPA(mod: BbmFullMod, version: BSVersion): Promise { const verionPath = await this.bsLocalService.getVersionPath(version); const hasIPAExe = await pathExist(path.join(verionPath, "IPA.exe"));