Move config storage next to the install and auto-create it if missing
versapad_combined.DEFAULT_PATH was hardcoded to this one machine's OneDrive
desktop, which made the tool unusable anywhere else. versapad_data.app_dir()
now resolves to the running .exe's own folder when frozen, or the project
directory when run from source, and DEFAULT_PATH hangs off that instead.
load_or_fetch() previously raised when both the file was missing and the
board unreachable, blocking a fresh install with no config and no board
attached. It now falls back to an empty default_combined() in that case, so
the tool is immediately usable either way. desktop_viewer's
_current_profile_view() picks up the same fallback instead of re-implementing
a narrower version of it.
Also drop the hardcoded PROFILE_NAMES dict, which had drifted out of sync
with the profile_names already stored in the combined JSON -- renaming a
profile in Programmiermodus never showed up in the read-only/browser views.
server.py and desktop_viewer.py now read names from the same JSON everywhere.
versapad_data.CONFIG_PATHS (read-only interop with the official C# VersaGUI's
JSON export) is intentionally left on the OneDrive desktop -- nothing in
this codebase writes there, it's not part of this tool's own config.
(cherry picked from commit 5d14bdd826)
This commit is contained in:
parent
8ba524c07b
commit
b4ad7698ed
7 changed files with 147 additions and 57 deletions
44
AGENTS.md
44
AGENTS.md
|
|
@ -16,6 +16,12 @@ Nutzerorientierte Einführung: [`README.md`](README.md).
|
|||
- `versapad_data.py` — Decoding für Anzeige: JSON laden, HID-Keycode/
|
||||
Consumer-Usage/Modifier → lesbarer Text, Grid-Geometrie
|
||||
(`index = spalte*5+reihe`), `hid_key_choices()`/`consumer_choices()`.
|
||||
`app_dir()` liefert das Verzeichnis für die eigene Config
|
||||
(`versapad_combined.DEFAULT_PATH`) — bei der `.exe` der Installations-
|
||||
ordner, sonst der Projektordner, siehe Installierbarkeit-Notiz unten.
|
||||
`CONFIG_PATHS` bleibt bewusst auf dem OneDrive-Desktop hartkodiert (Lese-
|
||||
Interop mit einem JSON-Export der offiziellen VersaGUI, kein von diesem
|
||||
Tool geschriebenes Format, siehe dort).
|
||||
- `server.py` — stdlib `http.server`, generiert HTML pro Request neu,
|
||||
Profil-Wechsel über `?profile=0|1|2`, Auto-Reload alle 4s. Rein lesend,
|
||||
kein Programmiermodus (bewusst einfach gehalten).
|
||||
|
|
@ -39,8 +45,14 @@ Nutzerorientierte Einführung: [`README.md`](README.md).
|
|||
liefert `READ_STATUS` schlicht Timeout, kein Absturz.
|
||||
- `versapad_combined.py` — Ein-Datei-Format (alle 3 Profile + Makros +
|
||||
**nur lokal gespeicherte** Profilnamen), Default-Pfad
|
||||
`~\OneDrive\Desktop\versapad_config_all.json`. Passt zum Wire-Protokoll:
|
||||
`CONFIG_BEGIN/COMMIT` überträgt ohnehin immer den kompletten 740B-Block.
|
||||
`versapad_data.app_dir()\versapad_config_all.json` (neben der
|
||||
Installation, nicht mehr hartkodiert auf einer bestimmten Maschine).
|
||||
Passt zum Wire-Protokoll: `CONFIG_BEGIN/COMMIT` überträgt ohnehin immer
|
||||
den kompletten 740B-Block. `load_or_fetch()` legt bei fehlender Datei
|
||||
automatisch eine neue an — erst Versuch per Serial vom Board, sonst als
|
||||
leere `default_combined()` (kein Board noetig fuer die Erstbenutzung).
|
||||
`read_profile_names()` liest nur die Namen (kein Board-Zugriff, fuer
|
||||
Tab-Beschriftungen im Nur-Lese-Modus, siehe Installierbarkeit-Notiz).
|
||||
|
||||
**UI:**
|
||||
- `desktop_viewer.py` — Tkinter, flaches Design, drei unabhängige Modi
|
||||
|
|
@ -93,6 +105,34 @@ Dokumentation und Verifikation unten für die Größeneinschätzung).
|
|||
vorhanden, und fällt sonst auf die klassischen `versapad_config{1,2,3}.json`
|
||||
zurück — beide Ansichten müssen dieselbe Quelle zeigen, sonst wirkt eine
|
||||
Bearbeitung "verschwunden".
|
||||
- **Installierbarkeit verbessert 2026-08-14:** Drei Probleme beim
|
||||
Weitergeben an andere Leute behoben. (1) `build_and_deploy.ps1` starb bei
|
||||
fehlenden Paketen (pyinstaller/pystray/pillow) kommentarlos, v.a. bei
|
||||
Doppelklick im Explorer, weil das Fenster sich sofort schließt. Fix:
|
||||
`requirements.txt` (alle Pakete an einer Stelle, README und Skript nutzen
|
||||
dieselbe Datei), Skript installiert sie selbst per `pip install -r`,
|
||||
läuft komplett in try/catch, prüft `$LASTEXITCODE` nach jedem nativen
|
||||
Aufruf, und pausiert am Ende (Erfolg wie Fehler) auf Tastendruck --
|
||||
`-NoPause` für CI/Automation. (2) `versapad_combined.DEFAULT_PATH` war
|
||||
hartkodiert auf `~\OneDrive\Desktop` einer bestimmten Maschine -- für
|
||||
andere Nutzer unbrauchbar. Fix: `versapad_data.app_dir()` (neue
|
||||
Funktion) liefert bei der gebauten `.exe` deren Installationsordner
|
||||
(`sys.executable`-Verzeichnis), sonst den Projektordner (`__file__`-
|
||||
Verzeichnis) -- `DEFAULT_PATH` hängt jetzt daran, landet also immer neben
|
||||
der laufenden Installation. `versapad_data.CONFIG_PATHS` (Lese-Interop
|
||||
mit der C#-VersaGUI) bleibt bewusst auf dem Desktop, siehe oben. (3) Fehlte
|
||||
die Config UND war kein Board erreichbar, blockierte das Tool mit einer
|
||||
Fehlermeldung statt zu starten. Fix: `load_or_fetch()` legt jetzt bei
|
||||
Board-Fehlschlag eine leere `default_combined()` an statt `RuntimeError`
|
||||
zu werfen -- Erstbenutzung ganz ohne vorhandene Config oder Board
|
||||
funktioniert jetzt. (4) Profilnamen waren zusätzlich hartkodiert in
|
||||
`versapad_data.PROFILE_NAMES` (Dict, jetzt entfernt, ersetzt durch
|
||||
`NUM_PROFILES = 3`) und liefen der JSON-`profile_names` parallel --
|
||||
Programmiermodus zeigte umbenannte Profile, Lesemodus/Browser-Ansicht
|
||||
weiterhin die alten Namen. Fix: `server.py` und `desktop_viewer.py` lesen
|
||||
Namen jetzt immer aus der kombinierten JSON (`combined["profile_names"]`
|
||||
bzw. `versapad_combined.read_profile_names()`), eine einzige Quelle der
|
||||
Wahrheit für alle Frontends.
|
||||
- **Bug behoben 2026-08-08:** `server.py` (`vp.load_profile()`) und
|
||||
`desktop_viewer.py` (`_current_profile_view()`) lasen im Nur-Lese-Modus
|
||||
hart von den Desktop-JSONs -- fehlten sie (z.B. User loescht sie), gab es
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue