From 1db3d3e8a02d35079d5cff394be7188a9e4a2c7e Mon Sep 17 00:00:00 2001 From: Ramon Date: Sat, 1 Aug 2026 14:20:28 +0200 Subject: [PATCH] v0.8.50-beta - Leesbare namen, zichtbaar wat al draait, en bruikbaar op een telefoon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Het auditlog toonde ruwe id's als 'store', 'reconfigure' en 'credentials_view'. Die hebben nu namen, ook in de filterlijsten, en de kolomkoppen zijn vertaald in plaats van hardgecodeerd Nederlands. Onbekende waarden vallen terug op de ruwe tekst zodat een module niets kapotmaakt - Nieuwe test die de broncode afloopt en elke audit.log() zonder vertaling aanwijst - Een modulepagina heette in de titelbalk letterlijk 'mod:mijnmodule' - De store herkende een installatie aan de mapnaam: een stack telde alleen mee als hij 'sonarr' of 'sonarr-...' heette. Wie zijn stack 'media-tv' noemde kreeg te zien dat Sonarr niet geinstalleerd was. Nu via de source uit .serverup.json, met een duidelijk Geinstalleerd-label per installatie waar je op kunt klikken om ernaartoe te gaan - Twaalf icoonknoppen per stack werden op een telefoon drie rijen plaatjes zonder naam. Daar blijven starten, herstarten en logs staan, plus een menu met de rest, mét namen. Op een breed scherm verandert er niets - De rij van twintig categorieknoppen boven de stacks is hetzelfde compacte menu geworden als in de app store Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Q9eqpADJSRs49SoGGr4NAy --- CHANGELOG.md | 28 +++++ VERSION | 2 +- server-up/core/git.py | 34 +++++- server-up/templates/index.html | 200 ++++++++++++++++++++++++++------- server-up/translations/en.json | 77 ++++++++++++- server-up/translations/nl.json | 77 ++++++++++++- tests/js/menu.test.js | 36 ++++++ tests/test_connect.py | 54 +++++++++ tests/test_i18n.py | 37 ++++++ 9 files changed, 499 insertions(+), 46 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f65fd9..7ab7eb4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,31 @@ +# v0.8.50-beta — Leesbare namen, zichtbaar wat al draait, en bruikbaar op een telefoon + +**Het auditlog toonde ruwe id's.** In de kolommen stond `store`, `reconfigure`, +`credentials_view` — de sleutels waarmee de code logt, niet iets wat je leest. Die +hebben nu Nederlandse namen ("App Store", "Opnieuw ingesteld", "Inloggegevens +bekeken"), ook in de filterlijsten erboven, en de kolomkoppen zijn niet langer +hardgecodeerd Nederlands maar vertaald. Een categorie die we niet kennen — van een +module bijvoorbeeld — valt terug op de ruwe waarde in plaats van leeg te blijven. +Er draait een test die de broncode afloopt en elke `audit.log(...)` zonder +vertaling aanwijst. Een modulepagina heette in de titelbalk letterlijk +`mod:mijnmodule`; die toont nu de naam van de module. + +**De store zag niet dat een app al draaide.** Er zat een klein groen vinkje naast +de installeerknop, en dat werkte alleen als je de stack precies zo had genoemd als +het sjabloon: `sonarr` of `sonarr-iets`. Noemde je hem `media-tv`, dan bleef de +store volhouden dat Sonarr nog niet geïnstalleerd was. Nu leest hij `.serverup.json` +uit — dezelfde `source` die het herconfigureerscherm al gebruikte — en toont een +duidelijk **Geïnstalleerd**-label met de naam van elke draaiende installatie, +waar je op kunt klikken om er meteen naartoe te gaan. De knop eronder zegt dan +"Nog een keer" in plaats van "Installeren". + +**Op een telefoon was de stackpagina niet te doen.** Elke stack had twaalf +icoonknoppen zonder tekst naast elkaar, wat op een smal scherm drie rijen +plaatjes werd. Daar staan nu starten, herstarten en logs, plus een menu met de +rest — mét namen erbij. Op een breed scherm verandert er niets. De rij van twintig +categorieknoppen boven de stacks is hetzelfde menu geworden als in de app store, +en "Updates controleren" verliest op smalle schermen zijn label. + # v0.8.40-beta — De filter in de app store is een menu geworden **Twee rijen knoppen vulden een half scherm.** Boven de app store stonden twintig diff --git a/VERSION b/VERSION index ca5543f..1036deb 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.8.40-beta +0.8.50-beta diff --git a/server-up/core/git.py b/server-up/core/git.py index 7119138..0dd88c2 100644 --- a/server-up/core/git.py +++ b/server-up/core/git.py @@ -140,11 +140,39 @@ def scan_dir(base: Path, lib: Path) -> list[dict]: return _scan_compose_dirs(base, lib) +def _installaties_per_sjabloon(lib: Path) -> dict[str, list[str]]: + """Welke stacks zijn uit welk sjabloon geïnstalleerd? + + Dit stond eerder op de mapnaam: een stack telde als installatie van + `sonarr` zodra hij `sonarr` of `sonarr-…` heette. Wie zijn stack `media-tv` + noemde, kreeg in de store te zien dat Sonarr nog niet geïnstalleerd was. + `.serverup.json` weet wél uit welk sjabloon hij komt — dezelfde `source` die + het herconfigureerscherm en `depends_on` gebruiken. + """ + uit: dict[str, list[str]] = {} + if not lib.exists(): + return uit + for d in sorted(lib.iterdir()): + if not d.is_dir() or d.name.startswith("."): + continue + mf = d / ".serverup.json" + if not mf.exists(): + continue + try: + bron = (json.loads(mf.read_text("utf-8")) or {}).get("source") or "" + except Exception: + continue + if bron: + uit.setdefault(bron, []).append(d.name) + return uit + + def _scan_compose_dirs(base: Path, lib: Path) -> list[dict]: """Scan één directory voor compose stacks. Detecteert zowel het klassieke Server Up formaat (compose.yml + stack.json) als het ChristianLempa Boilerplates formaat (template.json + files/).""" stacks = [] + geinstalleerd = _installaties_per_sjabloon(lib) for d in sorted(base.iterdir()): if not d.is_dir() or d.name.startswith((".", "_")): continue @@ -171,11 +199,13 @@ def _scan_compose_dirs(base: Path, lib: Path) -> list[dict]: else: meta["logo_url"] = guess_logo_url(meta.get("name") or d.name) - installed = [] + installed = set(geinstalleerd.get(d.name, ())) + # Vangnet voor installaties van vóór de metadata, en voor mappen die + # iemand met de hand heeft neergezet. if lib.exists(): for ld in lib.iterdir(): if ld.is_dir() and (ld.name == d.name or ld.name.startswith(d.name + "-")): - installed.append(ld.name) + installed.add(ld.name) entry = { "dir": d.name, "name": meta.pop("name", d.name), diff --git a/server-up/templates/index.html b/server-up/templates/index.html index f8ad429..74b55cd 100644 --- a/server-up/templates/index.html +++ b/server-up/templates/index.html @@ -173,7 +173,7 @@ tailwind.config = { -

Dashboard

+

Dashboard

- + +
+ +
+
+ + +
+
+
+
- -
- - -
+
- - - - - - - + + + + + + - - + + + +
+ +
+ +
+
@@ -573,6 +624,24 @@ tailwind.config = { BP + +
@@ -642,11 +710,11 @@ tailwind.config = {