From 64194d9ea4bac37b4d337d0b90b6c5b6993e8642 Mon Sep 17 00:00:00 2001 From: alwaysmesmerizingyou Date: Thu, 20 Aug 2026 19:11:39 -0700 Subject: [PATCH] detect builds by checksum and purge all old code --- main.js | 6 ++++-- patcher.js | 20 ++++++++++++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/main.js b/main.js index 55678c0..2622c6f 100644 --- a/main.js +++ b/main.js @@ -563,7 +563,7 @@ button:active { patcher.applyPatches(replacementsConfig); patcher.bridgeCredentials(serviceManager.credentialManager); - patcher.saveCurrentVersion(release.version); + patcher.saveCurrentVersion(release.version, release.sha256); fs.unlinkSync(tempZipPath); downloadSuccess = true; @@ -580,12 +580,14 @@ button:active { try { const isFirstRun = !patcher.verifyExtraction(); const localVersion = patcher.getCurrentVersion(); + const localSha = patcher.getCurrentSha(); const release = await updateClient.checkForUpdates(); + const hasUpdate = release.version !== localVersion || (release.sha256 && release.sha256 !== localSha); if (isFirstRun) { await installBuild(release); - } else if (release.version !== localVersion) { + } else if (hasUpdate) { const choice = await showUpdatePrompt(localVersion, release.version); if (choice === 'install') { await installBuild(release); diff --git a/patcher.js b/patcher.js index 28a48a0..e060432 100644 --- a/patcher.js +++ b/patcher.js @@ -13,7 +13,7 @@ class Patcher { const versionFile = path.join(this.appDataPath, 'version.json'); if (fs.existsSync(versionFile)) { try { - return JSON.parse(fs.readFileSync(versionFile, 'utf8')).version; + return JSON.parse(fs.readFileSync(versionFile, 'utf8')).version || '0.0.0'; } catch (e) { return '0.0.0'; } @@ -21,6 +21,18 @@ class Patcher { return '0.0.0'; } + getCurrentSha() { + const versionFile = path.join(this.appDataPath, 'version.json'); + if (fs.existsSync(versionFile)) { + try { + return JSON.parse(fs.readFileSync(versionFile, 'utf8')).sha256 || null; + } catch (e) { + return null; + } + } + return null; + } + bridgeCredentials(credentialManager) { const encryptedPath = path.join(this.appDataPath, 'encrypted-credentials.json'); if (!fs.existsSync(encryptedPath)) { @@ -39,14 +51,14 @@ class Patcher { return true; } - saveCurrentVersion(version) { + saveCurrentVersion(version, sha256 = null) { const versionFile = path.join(this.appDataPath, 'version.json'); fs.mkdirSync(this.appDataPath, { recursive: true }); - fs.writeFileSync(versionFile, JSON.stringify({ version }, null, 2), 'utf8'); + fs.writeFileSync(versionFile, JSON.stringify({ version, sha256 }, null, 2), 'utf8'); } purgeOldCode() { - const dirs = ['frontend', 'player', 'stream-api']; + const dirs = ['frontend', 'player', 'stream-api', 'auth-proxy', 'config']; for (const dir of dirs) { const fullPath = path.join(this.appDataPath, dir); if (fs.existsSync(fullPath)) {