From 761b5e27dbabfa1dd8f765f2b2bfcb8e96d9723c Mon Sep 17 00:00:00 2001 From: Sucukdeluxe <259325684+Sucukdeluxe@users.noreply.github.com> Date: Mon, 10 Aug 2026 13:10:39 +0200 Subject: [PATCH] fix(updater): show header action only when update is available Hide the header update action until a newer release is confirmed. Register update notifications before renderer initialization so startup cannot miss them. Refresh the public product screenshot and release metadata for v2.0.7. --- README.md | 2 +- assets/product-overview.png | Bin 51766 -> 46806 bytes package-lock.json | 4 +- package.json | 2 +- renderer/app.js | 7 ++- renderer/index.html | 2 +- renderer/styles.css | 4 ++ tests/public-release-verifier.test.js | 2 +- tests/ui-smoke.js | 59 ++++++++++++++++++++------ tests/updater-version.test.js | 18 ++++---- 10 files changed, 68 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index f2142db..e144ad0 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Multi-Hoster-Upload is a Windows desktop app for managing large file batches acr - Control per-hoster concurrency, bandwidth limits, retries, folder monitoring, notifications, and completed-item cleanup. - Keep local upload history and copy completed links in bulk. - Transfer accounts and settings with a 75-character encrypted online key while encryption and decryption stay on the client. -- Check for updates from the header and install available releases from an accessible update dialog. +- Check for updates from Settings or Help; when a newer release is available, install it from the header update action and accessible update dialog. ## Supported hosters diff --git a/assets/product-overview.png b/assets/product-overview.png index 4e7db08e409023950339f4f181d317aaffac02dc..514cdda3367e26fd8bb982a31a6fe36a6ecb953a 100644 GIT binary patch literal 46806 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�B6@f7a_NIMcoty`4QF-GUoqksEAQ%NV!Tu&OdLgx=+k#NDtu?Q`Xx-pF!gbRp8CBAHwnlr5th5 z-RE0UXGa@dTboQPm`ItEZgp2{P_=$zp1utJ1RJ<8C1hRBI0HghIbbOooZowzx$l$HJa?IdeTNOd2JFwN-jSW3&$Lk0wM~8gCC0Z|R0qN#qtDQxmz36S_-H zY;&w^qpIS@*B2@xOLFkFh#{>oNBpf`DG-K*H-95X-J99u^*Z2-f I`_I4r4J=vbod5s; literal 51766 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 { handleProgress(data); }); @@ -660,6 +656,7 @@ function _syncHeaderUpdateState() { ? `Update v${version || 'unbekannt'} verfügbar. Klicken zum Installieren.` : 'Nach Aktualisierungen suchen'; if (button) { + button.hidden = !available; button.classList.toggle('update-available', available); button.classList.toggle('is-checking', _updateCheckBusy); button.disabled = _updateCheckBusy; @@ -6734,6 +6731,8 @@ function updateStatsPanel() { } // --- Start --- +window.api.onUpdateAvailable(showUpdateBanner); +window.api.onUpdateProgress(handleUpdateProgress); window.api.onPrepareClose(prepareForWindowClose); init().then(() => { window.api.signalCloseHandshakeReady(); diff --git a/renderer/index.html b/renderer/index.html index e0081ca..ab9b3c5 100644 --- a/renderer/index.html +++ b/renderer/index.html @@ -53,7 +53,7 @@
- diff --git a/renderer/styles.css b/renderer/styles.css index 3b1cd6b..2ab002d 100644 --- a/renderer/styles.css +++ b/renderer/styles.css @@ -1772,6 +1772,10 @@ select.hs-input { max-width: none; width: auto; min-width: 140px; } transition: background-color .14s, transform .14s; } +.header-update-button[hidden] { + display: none; +} + .header-update-button::after { content: attr(data-tooltip); position: absolute; diff --git a/tests/public-release-verifier.test.js b/tests/public-release-verifier.test.js index 091e67e..e6ed67c 100644 --- a/tests/public-release-verifier.test.js +++ b/tests/public-release-verifier.test.js @@ -48,7 +48,7 @@ function createStage() { return stage; } -function verify(stage, version = '2.0.6') { +function verify(stage, version = '2.0.7') { return spawnSync(process.execPath, ['scripts/verify-public-release.mjs', '--source-only', '--version', version], { cwd: stage, encoding: 'utf8' diff --git a/tests/ui-smoke.js b/tests/ui-smoke.js index 125a6d7..72c17a5 100644 --- a/tests/ui-smoke.js +++ b/tests/ui-smoke.js @@ -32,7 +32,13 @@ const ConfigStore = require(path.join(process.cwd(), 'lib', 'config-store')); const updaterModule = require(path.join(process.cwd(), 'lib', 'updater')); let preparedUpdateMockCalls = 0; let launchedUpdateMockCalls = 0; -updaterModule.checkForUpdate = async () => ({ available: false }); +let updateCheckMockCalls = 0; +updaterModule.checkForUpdate = async () => { + updateCheckMockCalls++; + return updateCheckMockCalls === 1 + ? { available: true, remoteVersion: '9.9.8' } + : { available: false }; +}; updaterModule.prepareUpdate = async (onProgress) => { preparedUpdateMockCalls++; if (onProgress) onProgress({ stage: 'prepared', percent: 100 }); @@ -44,9 +50,20 @@ updaterModule.launchPreparedUpdate = () => { }; const initialIpcHandlers = new Map(); const registerIpcHandler = ipcMain.handle.bind(ipcMain); +let initialConfigReadDelayed = false; ipcMain.handle = (channel, listener) => { - if (!initialIpcHandlers.has(channel)) initialIpcHandlers.set(channel, listener); - return registerIpcHandler(channel, listener); + const registeredListener = channel === 'get-config' + ? async (...args) => { + const result = await listener(...args); + if (!initialConfigReadDelayed) { + initialConfigReadDelayed = true; + await new Promise(resolve => setTimeout(resolve, 4000)); + } + return result; + } + : listener; + if (!initialIpcHandlers.has(channel)) initialIpcHandlers.set(channel, registeredListener); + return registerIpcHandler(channel, registeredListener); }; function restoreInitialIpcHandler(channel) { ipcMain.removeHandler(channel); @@ -132,6 +149,10 @@ setTimeout(async () => { } try { + const startupUpdateState = await wc.executeJavaScript('(() => { const button = document.getElementById("headerUpdateBtn"); return [_knownUpdateInfo?.remoteVersion, button?.hidden, getComputedStyle(button).display, document.getElementById("updateBanner")?.style.display].join("|"); })()'); + check('Startup update survives pending renderer initialization', startupUpdateState === '9.9.8|false|flex|flex'); + await wc.executeJavaScript('_knownUpdateInfo = null; closeUpdateDialog(); _syncHeaderUpdateState();'); + await wc.executeJavaScript('queueJobs = []; selectedFiles = []; selectedJobIds.clear(); rebuildJobIndex(); setUploadSidebarFilter("all"); updateUploadView(); renderQueueTable(); updateStatusBar();'); console.log('\\n=== Upload View ==='); @@ -150,6 +171,9 @@ setTimeout(async () => { const headerUpdateButtonExists = await wc.executeJavaScript('Boolean(document.getElementById("headerUpdateBtn"))'); check('App header exposes the update action', headerUpdateButtonExists); + const initialHeaderUpdateVisibility = await wc.executeJavaScript('(() => { const button = document.getElementById("headerUpdateBtn"); return [button?.hidden, getComputedStyle(button).display].join("|"); })()'); + check('Header update action stays hidden until an update is available', initialHeaderUpdateVisibility === 'true|none'); + const initialUpdateLabel = await wc.executeJavaScript('document.querySelector("#headerUpdateBtn .header-update-label")?.textContent?.trim()'); check('App header uses the compact update label', initialUpdateLabel === 'Update'); @@ -492,14 +516,21 @@ setTimeout(async () => { document.getElementById('headerUpdateBtn').click(); })()\`); await new Promise(resolve => setTimeout(resolve, 100)); - const coordinatedUpdateBusy = await wc.executeJavaScript('(() => { const manual = document.getElementById("manualUpdateCheckBtn"); const header = document.getElementById("headerUpdateBtn"); return [manual?.disabled, manual?.getAttribute("aria-busy"), manual?.textContent?.trim(), header?.disabled, header?.getAttribute("aria-busy")].join("|"); })()'); - check('All update entry points share one in-flight check', updateCheckCallCount === 1 && coordinatedUpdateBusy === 'true|true|Prüfe…|true|true'); + const coordinatedUpdateBusy = await wc.executeJavaScript('(() => { const manual = document.getElementById("manualUpdateCheckBtn"); const header = document.getElementById("headerUpdateBtn"); return [manual?.disabled, manual?.getAttribute("aria-busy"), manual?.textContent?.trim(), header?.disabled, header?.getAttribute("aria-busy"), header?.hidden].join("|"); })()'); + check('All update entry points share one in-flight check', updateCheckCallCount === 1 && coordinatedUpdateBusy === 'true|true|Prüfe…|true|true|true'); updateCheckResolvers.splice(0).forEach(resolve => resolve({ available: false, error: 'Simulierter Netzwerkfehler' })); await new Promise(resolve => setTimeout(resolve, 150)); - const coordinatedUpdateError = await wc.executeJavaScript('(() => { const manual = document.getElementById("manualUpdateCheckBtn"); const header = document.getElementById("headerUpdateBtn"); return [manual?.disabled, header?.disabled, manual?.textContent?.trim(), document.getElementById("copyToast")?.textContent?.trim()].join("|"); })()'); - check('Settings update check uses the shared error contract', coordinatedUpdateError === 'false|false|Nach Updates suchen|Updateprüfung fehlgeschlagen'); + const coordinatedUpdateError = await wc.executeJavaScript('(() => { const manual = document.getElementById("manualUpdateCheckBtn"); const header = document.getElementById("headerUpdateBtn"); return [manual?.disabled, header?.disabled, header?.hidden, manual?.textContent?.trim(), document.getElementById("copyToast")?.textContent?.trim()].join("|"); })()'); + check('Settings update check uses the shared error contract', coordinatedUpdateError === 'false|false|true|Nach Updates suchen|Updateprüfung fehlgeschlagen'); await wc.executeJavaScript('document.getElementById("copyToast")?.classList.remove("show")'); + await wc.executeJavaScript('requestUpdateCheck(); true'); + await new Promise(resolve => setTimeout(resolve, 100)); + updateCheckResolvers.splice(0).forEach(resolve => resolve({ available: false })); + await new Promise(resolve => setTimeout(resolve, 150)); + const noUpdateHeaderVisibility = await wc.executeJavaScript('(() => { const button = document.getElementById("headerUpdateBtn"); return [button?.hidden, getComputedStyle(button).display].join("|"); })()'); + check('Successful no-update result keeps the header action hidden', noUpdateHeaderVisibility === 'true|none'); + const settingsNavigation = await wc.executeJavaScript('(() => { const buttons = [...document.querySelectorAll(".settings-nav-button")]; return [buttons.length, buttons.map(button => button.textContent.trim()).join("|"), document.querySelector(".settings-nav-button.active")?.dataset.settingsPage, document.getElementById("settingsSearchInput")?.placeholder].join("::"); })()'); check('Settings use the task-based sidebar navigation', settingsNavigation === '8::Allgemein|Uploads|Automatik|Benachrichtigungen|Logs & Support|Fernsteuerung|Diagnose-Zugriff|Backup & Übertragen::allgemein::Einstellungen durchsuchen'); @@ -1043,8 +1074,8 @@ setTimeout(async () => { check('Responsive queue keeps the fixed virtual row height', queueProgressVisibility.standard.rowHeight === 28 && queueProgressVisibility.minimum.rowHeight === 28); check('Minimum window keeps the settings header compact', compactSettingsHeader <= 58); - const updateOverlayState = await wc.executeJavaScript('document.getElementById("headerUpdateBtn").focus(); showUpdateBanner({ remoteVersion: "9.9.9" }); (() => { const overlay = document.getElementById("updateBanner"); const dialog = overlay?.querySelector(".update-dialog"); return [overlay?.classList.contains("update-overlay"), overlay?.style.display, dialog?.getAttribute("role"), dialog?.getAttribute("aria-modal")].join("|"); })()'); - check('Available update opens an accessible update dialog', updateOverlayState === 'true|flex|dialog|true'); + const updateOverlayState = await wc.executeJavaScript('_knownUpdateInfo = { available: true, remoteVersion: "9.9.9" }; _syncHeaderUpdateState(); document.getElementById("headerUpdateBtn").focus(); showUpdateBanner({ remoteVersion: "9.9.9" }); (() => { const overlay = document.getElementById("updateBanner"); const dialog = overlay?.querySelector(".update-dialog"); const button = document.getElementById("headerUpdateBtn"); return [overlay?.classList.contains("update-overlay"), overlay?.style.display, dialog?.getAttribute("role"), dialog?.getAttribute("aria-modal"), button?.hidden, getComputedStyle(button).display].join("|"); })()'); + check('Available update opens an accessible update dialog', updateOverlayState === 'true|flex|dialog|true|false|flex'); await new Promise(resolve => setTimeout(resolve, 100)); const updateModalKeyboard = await wc.executeJavaScript(\`(() => { @@ -1086,20 +1117,22 @@ setTimeout(async () => { overlay.dispatchEvent(new MouseEvent('click', { bubbles: true })); document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true, cancelable: true })); const progress = document.getElementById('updateProgressBar'); + const header = document.getElementById('headerUpdateBtn'); return { display: overlay.style.display, hidden: overlay.getAttribute('aria-hidden'), closeDisabled: document.getElementById('updateCloseBtn').disabled, dismissDisabled: document.getElementById('dismissUpdateBtn').disabled, + headerHidden: header.hidden, progressLabel: progress.getAttribute('aria-label'), progressText: progress.getAttribute('aria-valuetext') }; })()\`); - check('Busy update keeps its progress dialog open', busyUpdateState.display === 'flex' && busyUpdateState.hidden === 'false' && busyUpdateState.closeDisabled === true && busyUpdateState.dismissDisabled === true); + check('Busy update keeps its progress dialog open', busyUpdateState.display === 'flex' && busyUpdateState.hidden === 'false' && busyUpdateState.closeDisabled === true && busyUpdateState.dismissDisabled === true && busyUpdateState.headerHidden === false); check('Update progress exposes an accessible live value', busyUpdateState.progressLabel === 'Update-Fortschritt' && busyUpdateState.progressText === 'Download 50%'); - const updateErrorRecovery = await wc.executeJavaScript('handleUpdateProgress({ stage: "error", error: "Netzwerkfehler" }); document.getElementById("dismissUpdateBtn").click(); document.getElementById("updateBanner").style.display + "|" + document.getElementById("updateCloseBtn").disabled + "|" + document.getElementById("dismissUpdateBtn").disabled'); - check('Update errors restore all close actions', updateErrorRecovery === 'none|false|false'); + const updateErrorRecovery = await wc.executeJavaScript('handleUpdateProgress({ stage: "error", error: "Netzwerkfehler" }); document.getElementById("dismissUpdateBtn").click(); document.getElementById("updateBanner").style.display + "|" + document.getElementById("updateCloseBtn").disabled + "|" + document.getElementById("dismissUpdateBtn").disabled + "|" + document.getElementById("headerUpdateBtn").hidden'); + check('Update errors restore all close actions', updateErrorRecovery === 'none|false|false|false'); const initialInstallUpdateHandler = initialIpcHandlers.get('app:install-update'); const initialUpdateQueueHandler = initialIpcHandlers.get('save-pending-queue'); @@ -1267,7 +1300,7 @@ try { const result = execFileSync( electronPath, [`--user-data-dir=${userDataPath}`, '--require', injectPath, mainPath], - { cwd: path.join(__dirname, '..'), timeout: 45000, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] } + { cwd: path.join(__dirname, '..'), timeout: 60000, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] } ); console.log(result); const isolatedConfigPath = path.join(userDataPath, 'electron-config.json'); diff --git a/tests/updater-version.test.js b/tests/updater-version.test.js index 04ade35..7017239 100644 --- a/tests/updater-version.test.js +++ b/tests/updater-version.test.js @@ -83,7 +83,7 @@ test('a prepared installer launches at most once', () => { test('release plan keeps product artifacts separate from the transport tag', async () => { const { createReleasePlan, parseReleaseArgs, renderLatestYml } = await import(releasePlanUrl); - const plan = createReleasePlan(parseReleaseArgs(['2.0.6', '--transport-tag', 'v3.3.114', 'Interface', 'redesign'])); + const plan = createReleasePlan(parseReleaseArgs(['2.0.7', '--transport-tag', 'v3.3.115', 'Update', 'visibility'])); const latestYml = renderLatestYml(plan, 'abc123', 456, '2026-08-07T12:00:00.000Z'); assert.deepEqual({ version: plan.version, @@ -93,17 +93,17 @@ test('release plan keeps product artifacts separate from the transport tag', asy expectedArtifacts: plan.expectedArtifacts, latestYml }, { - version: '2.0.6', - transportTag: 'v3.3.114', - releaseTitle: 'Multi-Hoster-Upload v2.0.6', - releaseBody: 'Interface redesign', + version: '2.0.7', + transportTag: 'v3.3.115', + releaseTitle: 'Multi-Hoster-Upload v2.0.7', + releaseBody: 'Update visibility', expectedArtifacts: [ - 'Multi-Hoster-Upload Setup 2.0.6.exe', - 'Multi-Hoster-Upload 2.0.6.exe', - 'Multi-Hoster-Upload Setup 2.0.6.exe.blockmap', + 'Multi-Hoster-Upload Setup 2.0.7.exe', + 'Multi-Hoster-Upload 2.0.7.exe', + 'Multi-Hoster-Upload Setup 2.0.7.exe.blockmap', 'latest.yml' ], - latestYml: "version: 2.0.6\nfiles:\n - url: Multi-Hoster-Upload Setup 2.0.6.exe\n sha512: abc123\n size: 456\npath: Multi-Hoster-Upload Setup 2.0.6.exe\nsha512: abc123\nreleaseDate: '2026-08-07T12:00:00.000Z'\n" + latestYml: "version: 2.0.7\nfiles:\n - url: Multi-Hoster-Upload Setup 2.0.7.exe\n sha512: abc123\n size: 456\npath: Multi-Hoster-Upload Setup 2.0.7.exe\nsha512: abc123\nreleaseDate: '2026-08-07T12:00:00.000Z'\n" }); });