Keep what the page installed when the server restarts

The page edits a working copy of the flash image on purpose -- the file it was first pointed at may be a real calibration dump -- but a restart pointed at a different image switched to that file's copy instead, and the games installed through the page looked like they had vanished (measured: the app table came back holding an older slot). work/run-webui.ps1 now prefers the working copy the page has been editing, ahead of the original, and the page's own hint says which image it is editing and that the loaded one is never modified. A test asserts the order in the script.
This commit is contained in:
mckero committed 2026-10-01 22:03:37 +08:00
1 parent 673c181d59
commit dcf9dc00f5
3 files changed
+29 -2

No files matched your search

+20
View File
@@ -299,3 +299,23 @@ class TestRecoversFromAnExternalKill(unittest.TestCase):
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()
class TestLauncherPrefersTheWorkingCopy(unittest.TestCase):
"""A restart must not look like the page's installs vanished."""
def test_the_script_lists_the_working_copy_before_the_original(self):
import os as _os
path = _os.path.join(_os.path.dirname(_os.path.abspath(__file__)),
"..", "work", "run-webui.ps1")
if not _os.path.exists(path):
self.skipTest("work/run-webui.ps1 is not in this checkout")
with open(path, encoding="utf-8") as fh:
text = fh.read()
# the working copy the page edits comes before the file it was first pointed at
working = text.find("work\\firmware\\flash-current.img")
original = text.find("work\\user-flash.img")
self.assertNotEqual(working, -1, "the working copy is not in the list")
self.assertNotEqual(original, -1)
self.assertLess(working, original,
"a restart would fall back to the original image")
+3 -1
View File
@@ -975,7 +975,9 @@ def render_index(scale: int) -> str:
<div class="fwbar"> <div class="fwbar">
<label class="mini">flash image<input type="file" id="flashfile" accept=".img,.bin"></label> <label class="mini">flash image<input type="file" id="flashfile" accept=".img,.bin"></label>
<span class="hint">the multi-system slots live in the external flash; <span class="hint">the multi-system slots live in the external flash;
write a .bin into one, then press Multiboot</span> write a .bin into one, then press Multiboot. Edits go to a working copy of the image
(the file named above), so the one you loaded is never modified — and a restart keeps
that copy rather than reverting to the original</span>
</div> </div>
<table id="slottable"><tbody></tbody></table> <table id="slottable"><tbody></tbody></table>
</details> </details>
+6 -1
View File
@@ -46,7 +46,12 @@ if ($Status) { $common += @('--status-addr', $Status) }
if (-not $Kernel -and $env:ELF) { $Kernel = $env:ELF } if (-not $Kernel -and $env:ELF) { $Kernel = $env:ELF }
if (-not $Flash) { if (-not $Flash) {
$candidates = @($env:UVK5_FLASH_IMAGE, 'work\user-flash.img', 'assets\flash.img') # The page edits a working copy (webui copies the image before its first write, so a
# real calibration dump is never touched). Preferring it here means a restart keeps
# whatever was installed through the page, instead of silently falling back to the
# file it was first pointed at and looking like the install vanished.
$candidates = @($env:UVK5_FLASH_IMAGE, 'work\firmware\flash-current.img',
'work\user-flash.img', 'assets\flash.img')
foreach ($candidate in $candidates) { foreach ($candidate in $candidates) {
if ($candidate -and (Test-Path $candidate)) { $Flash = $candidate; break } if ($candidate -and (Test-Path $candidate)) { $Flash = $candidate; break }
} }