diff --git a/electron/osuUtil.js b/electron/osuUtil.js index 67e7a6c..e116608 100644 --- a/electron/osuUtil.js +++ b/electron/osuUtil.js @@ -264,24 +264,33 @@ async function getEZPPLauncherUpdateFiles(osuPath) { filesToDownload.push(updateFile); } } - return filesToDownload; + return [filesToDownload, updateFiles]; } -async function downloadEZPPLauncherUpdateFiles(osuPath, updateFiles) { +async function downloadEZPPLauncherUpdateFiles(osuPath, updateFiles, allFiles) { const eventEmitter = new EventEmitter(); const startDownload = async () => { //NOTE: delete files that are not in the updateFiles array - const foldersToPrune = updateFiles.map(file => path.dirname(path.join(osuPath, ...file.folder.split("/"), file.name))).filter((folder, index, self) => self.indexOf(folder) === index); + const foldersToPrune = allFiles.map(file => path.dirname(path.join(osuPath, ...file.folder.split("/"), file.name))).filter((folder, index, self) => self.indexOf(folder) === index); for (const pruneFolder of foldersToPrune) { //NOTE: check if the folder is not the osu root folder. if (path.basename(pruneFolder) == "osu!") continue; - for (const files of await fs.promises.readdir(pruneFolder)) { - const filePath = path.join(pruneFolder, files); - if (!updateFiles.some(file => path.join(osuPath, ...file.folder.split("/"), file.name) === filePath)) { - - await fs.promises.rm(filePath, { recursive: true, force: true }); + if (fs.existsSync(pruneFolder)) { + for (const files of await fs.promises.readdir(pruneFolder)) { + const filePath = path.join(pruneFolder, files); + const validFolder = allFiles.find(file => path.dirname(filePath).endsWith(file.folder)); + if (!validFolder) { + if (allFiles.find(file => file.name == path.basename(filePath)) === undefined) { + eventEmitter.emit("data", { + fileName: path.basename(filePath), + }); + try { + await fs.promises.rm(filePath, { recursive: true, force: true }); + } catch { } + } + } } } } diff --git a/main.js b/main.js index 7fd6650..4cd0cce 100644 --- a/main.js +++ b/main.js @@ -557,12 +557,13 @@ function registerIPCPipes() { status: "Looking for patcher updates...", }); await new Promise((res) => setTimeout(res, 1000)); - const patchFiles = await getEZPPLauncherUpdateFiles(osuPath); + const [patchFiles, allUpdateFiles] = await getEZPPLauncherUpdateFiles(osuPath); if (patchFiles.length > 0) { logger.log("EZPPLauncher updates found."); const patcherDownloader = await downloadEZPPLauncherUpdateFiles( osuPath, patchFiles, + allUpdateFiles ); let errored = false; patcherDownloader.eventEmitter.on("error", (data) => { @@ -587,6 +588,15 @@ function registerIPCPipes() { }/${formatBytes(data.total)})...`, }); }); + patcherDownloader.eventEmitter.on("delete", (data) => { + logger.log(`Deleting ${data.fileName}!`); + mainWindow.webContents.send("ezpplauncher:launchprogress", { + progress: -1, + }); + mainWindow.webContents.send("ezpplauncher:launchstatus", { + status: `Deleting ${data.fileName}...`, + }); + }); await patcherDownloader.startDownload(); mainWindow.webContents.send("ezpplauncher:launchprogress", { progress: -1, @@ -664,7 +674,7 @@ function registerIPCPipes() { if (fs.existsSync(updateFile)) { await fs.promises.rm(updateFile, { force: true, - recursive: (await fs.promises.lstat(updateFile)).isDirectory, + recursive: (await fs.promises.lstat(updateFile)).isDirectory(), }); } }