From 03b352bc157a2f1584d56543ff010ae729f07c70 Mon Sep 17 00:00:00 2001 From: HorizonCode Date: Tue, 23 Jan 2024 13:28:35 +0100 Subject: [PATCH 1/4] allow only a single instance --- main.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/main.js b/main.js index d05f977..10cd355 100644 --- a/main.js +++ b/main.js @@ -537,6 +537,12 @@ function registerIPCPipes() { } function createWindow() { + const gotTheLock = app.requestSingleInstanceLock(); + if (!gotTheLock) { + app.quit(); + return; + } + setupTitlebar(); // Create the browser window. From 8c09719b43a5822b713fcc1cc49bfdae3aaa009e Mon Sep 17 00:00:00 2001 From: HorizonCode Date: Tue, 23 Jan 2024 15:34:08 +0100 Subject: [PATCH 2/4] remove force update files created by osu --- main.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index 10cd355..403feb5 100644 --- a/main.js +++ b/main.js @@ -27,7 +27,7 @@ const { } = require("./electron/osuUtil"); const { formatBytes } = require("./electron/formattingUtil"); const windowName = require("get-window-by-name"); -const { existsSync } = require("fs"); +const fs = require("fs"); const { runFileDetached } = require("./electron/executeUtil"); const richPresence = require("./electron/richPresence"); const cryptUtil = require("./electron/cryptoUtil"); @@ -68,7 +68,7 @@ function startOsuStatus() { "EZPPLauncher", "patcher.exe", ); - if (existsSync(patcherExecuteable)) { + if (fs.existsSync(patcherExecuteable)) { runFileDetached(userOsuPath, patcherExecuteable); } } @@ -483,6 +483,24 @@ function registerIPCPipes() { await updateOsuConfigHashes(osuPath); await replaceUIFile(osuPath, false); + const forceUpdateFiles = [ + ".require_update", + "help.txt", + "_pending", + ]; + //TODO: needs testing + try { + for (const updateFileName of forceUpdateFiles) { + const updateFile = path.join(osuPath, updateFileName); + if (fs.existsSync(updateFile)) { + await fs.promises.rm(updateFile, { + force: true, + recursive: (await fs.promises.lstat(updateFile)).isDirectory, + }); + } + } + } catch {} + const userConfig = getUserConfig(osuPath); richPresence.updateVersion(await userConfig.get("LastVersion")); richPresence.update(); From 4348c36fa09a816b031f923b469e92f8a4b334a3 Mon Sep 17 00:00:00 2001 From: HorizonCode Date: Wed, 24 Jan 2024 16:31:34 +0100 Subject: [PATCH 3/4] launch osu updater before launching to verify all files --- electron/osuUtil.js | 6 ++ main.js | 46 ++++++++- package-lock.json | 220 ++++++++++++++++++++++++++++++++++++++++++-- package.json | 1 + 4 files changed, 261 insertions(+), 12 deletions(-) diff --git a/electron/osuUtil.js b/electron/osuUtil.js index 8a6ce3b..d669e9b 100644 --- a/electron/osuUtil.js +++ b/electron/osuUtil.js @@ -245,6 +245,11 @@ function downloadUpdateFiles(osuPath, updateFiles) { }; } +function runOsuUpdater(osuPath, onExit) { + const osuExecuteable = path.join(osuPath, "osu!.exe"); + runFile(osuPath, osuExecuteable, ["-repair"], onExit); +} + function runOsuWithDevServer(osuPath, serverDomain, onExit) { const osuExecuteable = path.join(osuPath, "osu!.exe"); runFile(osuPath, osuExecuteable, ["-devserver", serverDomain], onExit); @@ -475,4 +480,5 @@ module.exports = { replaceUIFile, findOsuInstallation, updateOsuConfigHashes, + runOsuUpdater, }; diff --git a/main.js b/main.js index 403feb5..52fd20d 100644 --- a/main.js +++ b/main.js @@ -24,6 +24,7 @@ const { replaceUIFile, findOsuInstallation, updateOsuConfigHashes, + runOsuUpdater, } = require("./electron/osuUtil"); const { formatBytes } = require("./electron/formattingUtil"); const windowName = require("get-window-by-name"); @@ -34,6 +35,7 @@ const cryptUtil = require("./electron/cryptoUtil"); const { getHwId } = require("./electron/hwidUtil"); const { appName, appVersion } = require("./electron/appInfo"); const { updateAvailable, releasesUrl } = require("./electron/updateCheck"); +const fkill = require("fkill"); // Keep a global reference of the window object, if you don't, the window will // be closed automatically when the JavaScript object is garbage collected. @@ -42,8 +44,9 @@ let osuCheckInterval; let userOsuPath; let osuLoaded = false; let patch = false; -let lastOsuStatus = ""; -let lastStatusUpdate; + +let terminate = false; +let finishedUpdating = false; let currentUser = undefined; @@ -51,6 +54,30 @@ function isDev() { return !app.isPackaged; } +async function waitForTermination() { + terminate = true; + return new Promise((res) => { + const checkInterval = setInterval(async () => { + const osuWindowTitle = windowName.getWindowText("osu!.exe"); + if (osuWindowTitle.length < 0) { + return; + } + const firstInstance = osuWindowTitle[0]; + console.log({ terminate, firstInstance }); + if (terminate && finishedUpdating) { + console.log("terminating..."); + finishedUpdating = false; + terminate = false; + const processId = firstInstance.processId; + await fkill(processId, { force: true, silent: true }); + clearInterval(checkInterval); + res(); + console.log("terminated"); + } + }, 500); + }); +} + function startOsuStatus() { osuCheckInterval = setInterval(async () => { const osuWindowTitle = windowName.getWindowText("osu!.exe"); @@ -58,7 +85,9 @@ function startOsuStatus() { return; } const firstInstance = osuWindowTitle[0]; + if (firstInstance) { + console.log(osuWindowTitle); if (!osuLoaded) { osuLoaded = true; setTimeout(() => { @@ -477,9 +506,22 @@ function registerIPCPipes() { await new Promise((res) => setTimeout(res, 1000)); } + mainWindow.webContents.send("ezpplauncher:launchstatus", { + status: "Launching osu updater to verify...", + }); + await new Promise((res) => setTimeout(res, 1000)); + + runOsuUpdater(osuPath, () => { + finishedUpdating = true; + }); + await waitForTermination(); + + await new Promise((res) => setTimeout(res, 1000)); + mainWindow.webContents.send("ezpplauncher:launchstatus", { status: "Preparing launch...", }); + await updateOsuConfigHashes(osuPath); await replaceUIFile(osuPath, false); diff --git a/package-lock.json b/package-lock.json index 27d5d85..28a167b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "custom-electron-titlebar": "^4.2.7", "discord-auto-rpc": "^1.0.17", "electron-serve": "^1.1.0", + "fkill": "^7.2.1", "get-window-by-name": "^2.0.0", "regedit-rs": "^1.0.2", "semver": "^7.5.4", @@ -1840,7 +1841,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -2081,6 +2081,14 @@ "node": ">=8" } }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "engines": { + "node": ">=8" + } + }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -2722,7 +2730,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, "engines": { "node": ">=6" } @@ -3024,7 +3031,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3919,6 +3925,44 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -4054,6 +4098,26 @@ "node": ">=8" } }, + "node_modules/fkill": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/fkill/-/fkill-7.2.1.tgz", + "integrity": "sha512-eN9cmsIlRdq06wu3m01OOEgQf5Xh/M7REm0jfZ4eL3V3XisjXzfRq3iyqtKS+FhO6wB36FvWRiRGdeSx5KpLAQ==", + "dependencies": { + "aggregate-error": "^3.1.0", + "arrify": "^2.0.1", + "execa": "^5.0.0", + "pid-port": "^0.1.0", + "process-exists": "^4.0.0", + "ps-list": "^7.2.0", + "taskkill": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/flowbite": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-2.2.1.tgz", @@ -4648,6 +4712,14 @@ "node": ">= 6" } }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, "node_modules/humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", @@ -4794,7 +4866,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, "engines": { "node": ">=8" } @@ -4951,6 +5022,17 @@ "@types/estree": "*" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -5307,6 +5389,11 @@ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -5364,7 +5451,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, "engines": { "node": ">=6" } @@ -5821,6 +5907,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/npmlog": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", @@ -5887,7 +5984,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -6012,7 +6108,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -6106,6 +6201,20 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pid-port": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pid-port/-/pid-port-0.1.1.tgz", + "integrity": "sha512-boqPJtSgZC6KOgXKNPC+/XR3xwVtpOtaLa7JLcdf8jfVe0ZM2TwllBXxxLUO8GQbOLJ4/hEtf2+L1QCKbaoHUg==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", @@ -6774,6 +6883,28 @@ "node": ">=10" } }, + "node_modules/process-exists": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/process-exists/-/process-exists-4.1.0.tgz", + "integrity": "sha512-BBJoiorUKoP2AuM5q/yKwIfT1YWRHsaxjW+Ayu9erLhqKOfnXzzVVML0XTYoQZuI1YvcWKmc1dh06DEy4+KzfA==", + "dependencies": { + "ps-list": "^6.3.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process-exists/node_modules/ps-list": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-6.3.0.tgz", + "integrity": "sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA==", + "engines": { + "node": ">=8" + } + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -6815,6 +6946,17 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/ps-list": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-7.2.0.tgz", + "integrity": "sha512-v4Bl6I3f2kJfr5o80ShABNHAokIgY+wFDTQfE+X3zWYgSGQOCBeYptLZUpoOALBqO5EawmDN/tjTldJesd0ujQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -7671,7 +7813,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -7683,7 +7824,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -8030,6 +8170,14 @@ "node": ">=8" } }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -8694,6 +8842,59 @@ "node": ">=10" } }, + "node_modules/taskkill": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/taskkill/-/taskkill-3.1.0.tgz", + "integrity": "sha512-5KcOFzPvd1nGFVrmB7H4+QAWVjYOf//+QTbOj0GpXbqtqbKGWVczG+rq6VhXAtdtlKLTs16NAmHRyF5vbggQ2w==", + "dependencies": { + "arrify": "^2.0.1", + "execa": "^3.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/taskkill/node_modules/execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/taskkill/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/taskkill/node_modules/p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/taskkill/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, "node_modules/temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -9159,7 +9360,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, diff --git a/package.json b/package.json index 0588f16..33a8e63 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "custom-electron-titlebar": "^4.2.7", "discord-auto-rpc": "^1.0.17", "electron-serve": "^1.1.0", + "fkill": "^7.2.1", "get-window-by-name": "^2.0.0", "regedit-rs": "^1.0.2", "semver": "^7.5.4", From 2329122ef02ef2d872717ee39fe331f25be22d01 Mon Sep 17 00:00:00 2001 From: HorizonCode Date: Thu, 25 Jan 2024 08:54:02 +0100 Subject: [PATCH 4/4] fix updating task --- main.js | 50 ++++++++++++++++++-------------------------------- 1 file changed, 18 insertions(+), 32 deletions(-) diff --git a/main.js b/main.js index 52fd20d..218c870 100644 --- a/main.js +++ b/main.js @@ -45,39 +45,12 @@ let userOsuPath; let osuLoaded = false; let patch = false; -let terminate = false; -let finishedUpdating = false; - let currentUser = undefined; function isDev() { return !app.isPackaged; } -async function waitForTermination() { - terminate = true; - return new Promise((res) => { - const checkInterval = setInterval(async () => { - const osuWindowTitle = windowName.getWindowText("osu!.exe"); - if (osuWindowTitle.length < 0) { - return; - } - const firstInstance = osuWindowTitle[0]; - console.log({ terminate, firstInstance }); - if (terminate && finishedUpdating) { - console.log("terminating..."); - finishedUpdating = false; - terminate = false; - const processId = firstInstance.processId; - await fkill(processId, { force: true, silent: true }); - clearInterval(checkInterval); - res(); - console.log("terminated"); - } - }, 500); - }); -} - function startOsuStatus() { osuCheckInterval = setInterval(async () => { const osuWindowTitle = windowName.getWindowText("osu!.exe"); @@ -87,7 +60,6 @@ function startOsuStatus() { const firstInstance = osuWindowTitle[0]; if (firstInstance) { - console.log(osuWindowTitle); if (!osuLoaded) { osuLoaded = true; setTimeout(() => { @@ -507,14 +479,28 @@ function registerIPCPipes() { } mainWindow.webContents.send("ezpplauncher:launchstatus", { - status: "Launching osu updater to verify...", + status: "Launching osu! updater to verify...", }); await new Promise((res) => setTimeout(res, 1000)); - runOsuUpdater(osuPath, () => { - finishedUpdating = true; + await new Promise((res) => { + runOsuUpdater(osuPath, async () => { + await new Promise((res) => setTimeout(res, 500)); + const terminationThread = setInterval(async () => { + const osuWindowTitle = windowName.getWindowText("osu!.exe"); + if (osuWindowTitle.length < 0) { + return; + } + const firstInstance = osuWindowTitle[0]; + if (firstInstance) { + const processId = firstInstance.processId; + await fkill(processId, { force: true, silent: true }); + clearInterval(terminationThread); + res(); + } + }, 500); + }); }); - await waitForTermination(); await new Promise((res) => setTimeout(res, 1000));