From 8d29bd682204bae8965ccc74b5714390f7ebd41c Mon Sep 17 00:00:00 2001 From: HorizonCode Date: Sun, 16 Oct 2022 22:44:56 +0200 Subject: [PATCH] whole update logic working --- app.js | 73 ++++++++++++++++++++++++++++++++++----------- osuUtil.js | 4 ++- preload/preload.js | 38 ++++++++++++++++++++++- ui/windowManager.js | 6 ++-- 4 files changed, 99 insertions(+), 22 deletions(-) diff --git a/app.js b/app.js index 0685212..ef8bd2f 100644 --- a/app.js +++ b/app.js @@ -21,12 +21,25 @@ const run = () => { mainWindow = createWindow(); mainWindow.on('show', async () => { + await doUpdateCheck(mainWindow); + }) + app.on('activate', function () { + if (BrowserWindow.getAllWindows().length === 0) mainWindow = createWindow(); + }) + app.on('window-all-closed', () => { + app.quit() + }) + ipcMain.on('do-update-check', async () => { + await doUpdateCheck(mainWindow); + }) + ipcMain.on('do-update', async () => { const osuPath = await config.get("osuPath", ""); const isValid = await osuUtil.isValidOsuFolder(osuPath); if (osuPath.trim == "" || !isValid) { mainWindow.webContents.send('status_update', { - type: "missing-folder" - }) + type: "error", + message: "Invalid osu! folder" + }); return; } if (fs.existsSync(osuPath)) { @@ -41,23 +54,18 @@ const run = () => { const releaseFiles = await osuUtil.getUpdateFiles(releaseStream); const filesToDownload = await osuUtil.filesThatNeedUpdate(tempOsuPath, releaseFiles); - // const downloadTask = await osuUtil.downloadUpdateFiles(osuPath, filesToDownload); - // downloadTask.on('completed', () => { - // console.log("done!"); - // }); - mainWindow.webContents.send('status_update', { - type: filesToDownload.length > 0 ? "update-available" : "up-to-date" - }) + const downloadTask = await osuUtil.downloadUpdateFiles(osuPath, filesToDownload); + downloadTask.on('completed', () => { + mainWindow.webContents.send('status_update', { + type: "update-complete" + }) + }); + } else mainWindow.webContents.send('status_update', { - type: "missing-folder" - }) - }) - app.on('activate', function () { - if (BrowserWindow.getAllWindows().length === 0) mainWindow = createWindow(); - }) - app.on('window-all-closed', () => { - app.quit() + type: "error", + message: "Invalid osu! folder" + }); }) ipcMain.handle('set-osu-dir', async (event) => { const yes = await dialog.showOpenDialog({ @@ -75,6 +83,37 @@ const run = () => { }) } +async function doUpdateCheck(window) { + const osuPath = await config.get("osuPath", ""); + const isValid = await osuUtil.isValidOsuFolder(osuPath); + if (osuPath.trim == "" || !isValid) { + window.webContents.send('status_update', { + type: "missing-folder" + }) + return; + } + if (fs.existsSync(osuPath)) { + tempOsuPath = osuPath; + const osuConfig = await osuUtil.getLatestConfig(tempOsuPath); + const lastVersion = await osuConfig.get("LastVersion"); + let releaseStream = "stable40"; + if (lastVersion.endsWith("cuttingedge")) + releaseStream = "cuttingedge" + else if (lastVersion.endsWith("beta")) + releaseStream = "beta"; + + const releaseFiles = await osuUtil.getUpdateFiles(releaseStream); + const filesToDownload = await osuUtil.filesThatNeedUpdate(tempOsuPath, releaseFiles); + console.log("sending update check " + (filesToDownload.length > 0 ? "update-available" : "up-to-date")) + window.webContents.send('status_update', { + type: filesToDownload.length > 0 ? "update-available" : "up-to-date" + }) + } else + window.webContents.send('status_update', { + type: "missing-folder" + }) +} + function createWindow() { // Create the browser window. const win = windowManager.createWindow(520, 420); diff --git a/osuUtil.js b/osuUtil.js index 7a26cd3..a7c909f 100644 --- a/osuUtil.js +++ b/osuUtil.js @@ -120,7 +120,9 @@ async function downloadUpdateFiles(osuPath, filesToUpdate) { let completedIndex = 0; filesToUpdate.forEach(async (fileToUpdate) => { const filePath = path.join(osuPath, fileToUpdate.fileName); - await fs.promises.rm(filePath); + if (await fu.existsAsync(filePath)) + await fs.promises.rm(filePath); + const fileDownload = new DownloaderHelper(fileToUpdate.fileURL, osuPath, { fileName: fileToUpdate.fileName, override: true, diff --git a/preload/preload.js b/preload/preload.js index e6a8761..303b99e 100644 --- a/preload/preload.js +++ b/preload/preload.js @@ -15,6 +15,21 @@ window.addEventListener('DOMContentLoaded', () => { const $ = require('jquery'); const Swal = require('sweetalert2'); + let currentState; + + $("#launch-btn").on('click', async () => { + switch (currentState) { + case "up-to-date": + //TODO: launch client + break; + case "update-available": + $("#launch-btn").attr('disabled', true); + $('#launch-btn').html('Updating...'); + ipcRenderer.send("do-update"); + break; + } + }); + $("#folder-btn").on('click', async () => { const success = await ipcRenderer.invoke('set-osu-dir'); if (success == undefined) @@ -26,6 +41,7 @@ window.addEventListener('DOMContentLoaded', () => { icon: 'success', confirmButtonText: 'Cool' }) + ipcRenderer.send("do-update-check"); } else { Swal.fire({ title: 'Uh oh!', @@ -37,6 +53,7 @@ window.addEventListener('DOMContentLoaded', () => { }); ipcRenderer.on('status_update', (event, status) => { + currentState = status.type; switch (status.type) { case "up-to-date": $("#launch-btn").attr('disabled', false); @@ -47,7 +64,26 @@ window.addEventListener('DOMContentLoaded', () => { $('#launch-btn').html('Update'); break; case "missing-folder": - $('#launch-btn').html('Please set your osu folder!'); + $('#launch-btn').html('Please set your osu! folder'); + break; + case "error": + Swal.fire({ + title: 'Uh oh!', + text: status.message, + icon: 'error', + confirmButtonText: 'Okay' + }); + ipcRenderer.send("do-update-check"); + break; + case "update-complete": + Swal.fire({ + title: 'Yaaay!', + text: "Your osu! client has been successfully updated!", + icon: 'success', + confirmButtonText: 'Thanks :3' + }); + ipcRenderer.send("do-update-check"); + break; } }) diff --git a/ui/windowManager.js b/ui/windowManager.js index ff8ae47..774cdb0 100644 --- a/ui/windowManager.js +++ b/ui/windowManager.js @@ -33,9 +33,9 @@ module.exports = { window.webContents.setUserAgent("EZPPLauncher"); attachTitlebarToWindow(window); - window.webContents.openDevTools({ - mode: "detach" - }); + // window.webContents.openDevTools({ + // mode: "detach" + // }); return window; },