fix: digital-mode grouping ignored by the spots already listed

The backend honours the setting: it normalises the log side and the spot's own
mode through the same grouper, so an FT4 spot on a band worked in FT8 reads as
worked. That was not the fault.

Spot statuses are cached per call+band+mode and the cache never expired. Ticking
the box in Settings therefore changed nothing on screen — every spot already
listed kept the answer to the old question, and only new arrivals were judged by
the new rule. The cache is now dropped when settings are saved.

Also: writeUiPref swallowed a failed database write. The interface kept working
from localStorage while the BACKEND — which reads some of these keys, this one
among them — still saw the old value. The two disagreeing in silence is exactly
the shape of this bug, so the failure is now logged.
This commit is contained in:
2026-07-31 12:20:07 +02:00
parent eb40991482
commit c5ac945de0
3 changed files with 20 additions and 5 deletions
+8 -2
View File
@@ -5,7 +5,7 @@
// folder (data/) to another machine. These helpers mirror them into the DB
// settings table (ui.* keys, like the grid columns) so the whole setup is
// identical after a copy.
import { GetUIPref, SetUIPref } from '../../wailsjs/go/main/App';
import { GetUIPref, SetUIPref, LogUIError } from '../../wailsjs/go/main/App';
// Keys that must travel with data/ (DB is the portable source of truth; the
// localStorage copy is just a fast, synchronous cache).
@@ -65,5 +65,11 @@ export async function syncPortablePrefs(): Promise<void> {
// Use it everywhere these keys are written instead of localStorage.setItem.
export function writeUiPref(key: string, value: string): void {
try { localStorage.setItem(key, value); } catch { /* quota / private mode */ }
SetUIPref(key, value).catch(() => { /* DB unavailable — the cache still holds it */ });
SetUIPref(key, value).catch((e: any) => {
// The cache still holds it, so the interface behaves — but the BACKEND
// reads some of these keys too (digital-mode grouping decides how the
// cluster judges a slot). A write that reaches localStorage and not the
// database makes the two disagree, and used to do so in silence.
try { LogUIError("ui pref", "could not store " + key + ": " + String(e?.message ?? e), ""); } catch {}
});
}