diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-09-05 09:28:03 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-09-05 09:28:03 +0200 |
| commit | 7601991ccb1d75637c055062c38b1852eeef9700 (patch) | |
| tree | 022d6ce76e632d005417c82e92e0277614a92689 /packages/meshbay-hub/src/meshbay_hub/static/node-page.js | |
| parent | 301c8998bfdcac80ad3302e2d2ebe853e2ea6de1 (diff) | |
| download | meshbay-7601991ccb1d75637c055062c38b1852eeef9700.tar.gz | |
feat(client): a Node-page toggle to switch into/out of service mode
The installer's own mode question is effectively one-shot: customInstall
skips it entirely once the firewall rules already exist, for any reason --
and per-user mode sets those up on its own, with no Scheduled Task involved.
So declining once (or the rules existing from something unrelated, as
happened on a dev machine this session) was a dead end: no reinstall, repair,
or uninstall/reinstall cycle could ever bring the question back, since
uninstall defaults to leaving both alone.
Add the other door in (and out): a checkbox on the Node page, next to the
existing per-user autostart toggle, wired main.js -> preload.js -> platform.js
-> node-page.js. It runs packaging/win/service-mode.ps1 -- the exact script
installer.nsh already runs -- via one Start-Process -Verb RunAs elevation, so
the two paths can never disagree about what service mode means. The elevation
helper writes a tiny param()-based .ps1 to %TEMP% so the target script path
and its arguments bind through real PowerShell parameters instead of nested
string-quoting.
Also fixes a real pre-existing gap found while checking this: 8 of the 10
locale catalogues (all but en/fr) were missing the autostart/service-mode
keys added in an earlier commit this session (b782886) -- test_locales.py's
key-set-parity check uses a for-loop with an inline assert, so it stopped at
the first mismatch (fr) and never actually reached the other eight. Backfilled
all five keys (three pre-existing, two new) in de/es/it/ja/nl/pl/pt-BR/zh-CN.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/node-page.js')
| -rw-r--r-- | packages/meshbay-hub/src/meshbay_hub/static/node-page.js | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/node-page.js b/packages/meshbay-hub/src/meshbay_hub/static/node-page.js index d242b75..2a0b0d7 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/node-page.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/node-page.js @@ -53,6 +53,17 @@ function NodeServicePanel({ onChanged }) { : platform.node.autostart.install())); }, [act, info]); + // Switching mode itself — the installer's own choice is effectively one-shot + // (it skips the question once the firewall rules exist for any reason, and + // per-user mode sets those up on its own with no Scheduled Task), so this is + // the only way back in if service mode was declined, or out if it is no + // longer wanted. One elevation, task + firewall together, same script. + const toggleServiceMode = useCallback(() => { + act('serviceMode', () => (info && info.mode === 'service' + ? platform.node.serviceMode.remove() + : platform.node.serviceMode.install())); + }, [act, info]); + if (!platform.node.service.available) return null; if (!info || info.supported === false) { return html`<div class="node-service"> @@ -99,6 +110,14 @@ function NodeServicePanel({ onChanged }) { ${' '}${busy === 'autostart' ? t('node.autostart_updating') : t('node.autostart_label')} </label> `} + ${platform.node.serviceMode.available && typeof info.mode === 'string' && html` + <label class="toggle-switch ${busy ? 'toggle-switch-disabled' : ''}"> + <input type="checkbox" checked=${info.mode === 'service'} disabled=${!!busy} + onChange=${toggleServiceMode} /> + <span class="toggle-switch-track"><span class="toggle-switch-thumb"></span></span> + ${' '}${busy === 'serviceMode' ? t('node.service_mode_updating') : t('node.service_mode_label')} + </label> + `} </div>`; } |