iris-gamebox 0.5.0: Spiele-Suche wird die Gamebox-App — Header, Treffer-Sidebar, Material-Detailansicht #246

Closed
opened 2026-10-24 14:24:40 +00:00 by alf · 6 comments
Owner

Ziel

iris-gamebox 0.5.0: die Anwenden-Seite „Spiele-Suche" (Chevron) wird zur Gamebox-App — Bibliothek stöbern, Material ansehen, installieren, spielen. Folgt auf iris/iris-plugins#235 (Grundplugin 0.1.0–0.4.1); dieses Issue dokumentiert die Weiterentwicklung.

Leitbild

Aus dem Formular wird eine App im Stil eines Managers: Kopfzeile mit Suche und Cheverons, links die Treffer als Liste mit Cover-Miniaturen, rechts die Hauptansicht mit allem, was die Bibliotheken an Material hergeben (Box-Art, Screenshots, Gameplay-Videos, Handbücher, Metadaten).

Layout (Umbau von web/search.html, Chevron heißt „Gamebox")

  • Header: Suchfeld (Volltext über Titel + Entwickler + Publisher, gewichtet; Genre nicht) · Chevron Systemauswahl · Chevron Sortierung.
  • Linke Sidebar: Segment-Schalter „Store / Installiert" über der Liste.
    • Store: Bibliothekstreffer mit Cover-Miniatur (64 px, lazy via IntersectionObserver, Platzhalter bei fehlender Art), Paginierung wie bisher.
    • Installiert: gebaute Apps nur aus der eingestellten Ablage, neueste Bauzeit zuerst, Auswahl wie im Store; ersetzt das alte „Zuletzt gebaut".
  • Hauptansicht beim Auswählen eines Treffers:
    • Aktionszeile oben: „Spielen" (wenn die App in der Ablage existiert; startet über neuen panel_api-Befehl launch) bzw. „Installieren"; secondary „In der Ablage zeigen".
    • Kopf: Titel, System · Größe · Jahr · Entwickler · Publisher · Genre · Spielerzahl; Overview/Notizen gekürzt, aufklappbar.
    • Hauptbild: Box Front (Fallback Reconstructed / covers) mit Wechselstreifen auf die Kategorien, die existieren (Back, 3D, Marquee, Clear Logo …).
    • Screenshot-Galerie: bis 8 Gameplay-Screenshots, Klick vergrößert (Lightbox).
    • „Gameplay-Video öffnen" / „Handbuch öffnen" (nur wenn vorhanden) — öffnen über launch im Standardprogramm; kein Einbetten (panel_api kann nur JSON, kein Streaming).
    • Fehlendes Material → Abschnitt verschwindet, keine leeren Kacheln.
  • Installieren-Sheet (bei „Installieren", Inhalt der alten Detailspalte): App-Name, Ablage, DOS-Menü-Tasten (nur wenn relevant), „App erzeugen" + Fortschritt, Verteil-Hinweis. Bei installierter App stattdessen „Neu bauen" / „Entfernen" (mit Bestätigung; löscht nur das App-Bundle in der Ablage, nie ROM/BIOS in der Quelle).

Material (gemessen 2026-10-24)

  • eXoDOS Images/MS-DOS/: 43 Kategorien (Box Front/Back/3D/Full/Spine, Clear Logo, Banner, Screenshot-Kategorien …); Box-Front 5129, Gameplay-Screenshots 9585; Videos/MS-DOS/ 4298 MP4 (namensgleich); Manuals/MS-DOS/. XML je Spiel: Developer, Publisher, ReleaseDate, Genre, Series, PlayMode, MaxPlayers, Overview/Notes.
  • RetroDeck ES-DE/downloaded_media/<system>/: covers/manuals/videos/screenshots/marquees/miximages/physicalmedia (psx: 503/286/501/…); Metadaten (desc, developer, publisher, genre, releasedate, players) in ES-DE/gamelists/<system>/gamelist.xml — wird neu ausgewertet.

Technik

  • Index-Erweiterung (ein Lauf, ~20 s): pro Spiel Medienpfade (cover[], screenshots[], video, manual) + Metadaten; Namenszuordnung über Stems wie beim bestehenden cover-Befehl, auf alle Medienarten erweitert. RetroDeck-Metadaten aus gamelist.xml.
  • media-Befehl (panel_api): {handle, art, index, size} → skaliert mit sips in den Plugin-Cache (thumb 64 px / full ~640 px), Antwort als base64-data-URL im JSON; akzeptiert nur Dateien unter den konfigurierten Bibliothekspfaden.
  • launch-Befehl (panel_api): open auf App-Bundle/MP4/PDF — nur aus konfigurierter Ablage/Bibliotheken.
  • Installiert-Erkennung: gebaute Apps tragen Contents/Resources/gamebox.json mit Handle; Abgleich der Ablage beim Select, nicht über den App-Namen.
  • Manifest: quick_access_label „Gamebox"; panel_api-Befehle media, launch ergänzen.

Taktung

Ein Issue, zwei PRs, eine Version 0.5.0:

  1. PR 1 — Fundament: Index-Schema + Metadaten + media/launch (CLI-testbar, ohne UI-Zwang).
  2. PR 2 — App-Ansicht: search.html neu auf dem Fundament.

Entscheidungen (mit Nutzer geklärt 2026-10-24)

  • Neue App-Ansicht ersetzt die bisherige „Spiele-Suche"-Seite (manifestbedingt max. zwei Web-Views).
  • Bau-Workflow (App-Name, Ablage, DOS-Menü-Tasten, Fortschritt) zieht ins Installieren-Sheet; Aktionszeile „Spielen"/„Installieren" entscheidet per gamebox.json-Marker; „Spielen" per launch.
  • Medien: Bilder skaliert als base64 im JSON (sips-Cache), Videos/Handbücher per open, kein Streaming, kein Vor-Generieren aller Medien.
  • Cover-Miniaturen in der Trefferliste (64 px, lazy).
  • Sidebar-Segmente „Store / Installiert"; Installiert scannt nur die eingestellte Ablage; sortiert nach Bauzeit, neueste zuerst.
  • Suche: Volltext Titel + Entwickler + Publisher, Genre nicht; Scoring gewichtet.
  • Chevron-Name „Gamebox".
## Ziel iris-gamebox 0.5.0: die Anwenden-Seite „Spiele-Suche" (Chevron) wird zur **Gamebox-App** — Bibliothek stöbern, Material ansehen, installieren, spielen. Folgt auf iris/iris-plugins#235 (Grundplugin 0.1.0–0.4.1); dieses Issue dokumentiert die Weiterentwicklung. ## Leitbild Aus dem Formular wird eine App im Stil eines Managers: Kopfzeile mit Suche und Cheverons, links die Treffer als Liste mit Cover-Miniaturen, rechts die Hauptansicht mit allem, was die Bibliotheken an Material hergeben (Box-Art, Screenshots, Gameplay-Videos, Handbücher, Metadaten). ## Layout (Umbau von `web/search.html`, Chevron heißt „Gamebox") - **Header:** Suchfeld (Volltext über Titel + Entwickler + Publisher, gewichtet; Genre nicht) · Chevron Systemauswahl · Chevron Sortierung. - **Linke Sidebar:** Segment-Schalter **„Store / Installiert"** über der Liste. - *Store:* Bibliothekstreffer mit Cover-Miniatur (64 px, lazy via IntersectionObserver, Platzhalter bei fehlender Art), Paginierung wie bisher. - *Installiert:* gebaute Apps **nur aus der eingestellten Ablage**, neueste Bauzeit zuerst, Auswahl wie im Store; ersetzt das alte „Zuletzt gebaut". - **Hauptansicht** beim Auswählen eines Treffers: - **Aktionszeile oben:** „Spielen" (wenn die App in der Ablage existiert; startet über neuen panel_api-Befehl `launch`) bzw. **„Installieren"**; secondary „In der Ablage zeigen". - **Kopf:** Titel, System · Größe · Jahr · Entwickler · Publisher · Genre · Spielerzahl; Overview/Notizen gekürzt, aufklappbar. - **Hauptbild:** Box Front (Fallback Reconstructed / covers) mit Wechselstreifen auf die Kategorien, die existieren (Back, 3D, Marquee, Clear Logo …). - **Screenshot-Galerie:** bis 8 Gameplay-Screenshots, Klick vergrößert (Lightbox). - **„Gameplay-Video öffnen" / „Handbuch öffnen"** (nur wenn vorhanden) — öffnen über `launch` im Standardprogramm; **kein Einbetten** (panel_api kann nur JSON, kein Streaming). - Fehlendes Material → Abschnitt verschwindet, keine leeren Kacheln. - **Installieren-Sheet** (bei „Installieren", Inhalt der alten Detailspalte): App-Name, Ablage, DOS-Menü-Tasten (nur wenn relevant), „App erzeugen" + Fortschritt, Verteil-Hinweis. Bei installierter App stattdessen „Neu bauen" / „Entfernen" (mit Bestätigung; löscht nur das App-Bundle in der Ablage, nie ROM/BIOS in der Quelle). ## Material (gemessen 2026-10-24) - **eXoDOS** `Images/MS-DOS/`: 43 Kategorien (Box Front/Back/3D/Full/Spine, Clear Logo, Banner, Screenshot-Kategorien …); Box-Front 5129, Gameplay-Screenshots 9585; `Videos/MS-DOS/` 4298 MP4 (namensgleich); `Manuals/MS-DOS/`. XML je Spiel: Developer, Publisher, ReleaseDate, Genre, Series, PlayMode, MaxPlayers, Overview/Notes. - **RetroDeck** `ES-DE/downloaded_media/<system>/`: covers/manuals/videos/screenshots/marquees/miximages/physicalmedia (psx: 503/286/501/…); Metadaten (desc, developer, publisher, genre, releasedate, players) in `ES-DE/gamelists/<system>/gamelist.xml` — wird neu ausgewertet. ## Technik - **Index-Erweiterung** (ein Lauf, ~20 s): pro Spiel Medienpfade (cover[], screenshots[], video, manual) + Metadaten; Namenszuordnung über Stems wie beim bestehenden `cover`-Befehl, auf alle Medienarten erweitert. RetroDeck-Metadaten aus gamelist.xml. - **`media`-Befehl** (panel_api): {handle, art, index, size} → skaliert mit `sips` in den Plugin-Cache (thumb 64 px / full ~640 px), Antwort als base64-data-URL im JSON; akzeptiert nur Dateien unter den konfigurierten Bibliothekspfaden. - **`launch`-Befehl** (panel_api): `open` auf App-Bundle/MP4/PDF — nur aus konfigurierter Ablage/Bibliotheken. - **Installiert-Erkennung:** gebaute Apps tragen `Contents/Resources/gamebox.json` mit Handle; Abgleich der Ablage beim Select, nicht über den App-Namen. - **Manifest:** `quick_access_label` „Gamebox"; panel_api-Befehle `media`, `launch` ergänzen. ## Taktung Ein Issue, zwei PRs, eine Version 0.5.0: 1. **PR 1 — Fundament:** Index-Schema + Metadaten + `media`/`launch` (CLI-testbar, ohne UI-Zwang). 2. **PR 2 — App-Ansicht:** `search.html` neu auf dem Fundament. ## Entscheidungen (mit Nutzer geklärt 2026-10-24) - Neue App-Ansicht **ersetzt** die bisherige „Spiele-Suche"-Seite (manifestbedingt max. zwei Web-Views). - Bau-Workflow (App-Name, Ablage, DOS-Menü-Tasten, Fortschritt) zieht ins **Installieren-Sheet**; Aktionszeile „Spielen"/„Installieren" entscheidet per gamebox.json-Marker; „Spielen" per `launch`. - Medien: Bilder skaliert als base64 im JSON (sips-Cache), Videos/Handbücher per `open`, kein Streaming, kein Vor-Generieren aller Medien. - Cover-Miniaturen in der Trefferliste (64 px, lazy). - Sidebar-Segmente „Store / Installiert"; Installiert scannt **nur die eingestellte Ablage**; sortiert nach Bauzeit, neueste zuerst. - Suche: Volltext Titel + Entwickler + Publisher, Genre nicht; Scoring gewichtet. - Chevron-Name „Gamebox".
Author
Owner

PR #247 gemergt: docs(iris-gamebox): PLAN.md — Plan 0.5.0 Gamebox-App (#246)
#247

Commits:

  • docs(iris-gamebox): PLAN.md — Plan 0.5.0 Gamebox-App (#246)

Stand

Nur Planung und Doku, kein Code.

Befund

Alf will die Anwenden-Seite „Spiele-Suche" zur App machen (Screenshot 2026-10-24): Header mit Titel-Suche und Cheverons für System/Sortierung, linke Sidebar mit Treffern, rechte Hauptansicht mit dem Material der Bibliotheken. Materialbestände gemessen: eXoDOS 43 Bildkategorien (Box-Front 5129, Gameplay-Screenshots 9585), Videos 4298 (namensgleich), Manuals; RetroDeck ES-DE/downloaded_media/<sys>/ (covers/manuals/videos/screenshots), Metadaten in ES-DE/gamelists/<sys>/gamelist.xml (neu auszuwerten). Technik-Fall: panel_api gibt nur JSON zurück, /plugins/{id}/file bedient nur das Plugin-Paket → Medien als base64 aus neuem media-Befehl (sips-Cache), Videos/PDFs per launch/open.

Geändert

  • PLAN.md: Sektion „Plan 0.5.0 — Spiele-Suche wird die Gamebox-App" (Layout, Segmente Store/Installiert, Aktionszeile Spielen/Installieren, Installieren-Sheet, media/launch, gamebox.json-Marker, Index-Erweiterung, Taktung zwei PRs / eine Version); Issue-Referenz im Kopf auf iris/iris-plugins#246 ergänzt.

Geprüft

PLAN.md gegen den gemessenen Stand von #235 und die Manifest-Grenzen (max. zwei Web-Views, panel_api-JSON-Vertrag) gelesen.

Nicht geprüft

Nichts auszuführen — reine Doku. Umsetzung folgt in zwei PRs (Fundament, dann App-Ansicht).

PR #247 gemergt: docs(iris-gamebox): PLAN.md — Plan 0.5.0 Gamebox-App (#246) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/247 Commits: - docs(iris-gamebox): PLAN.md — Plan 0.5.0 Gamebox-App (#246) --- # Stand Nur Planung und Doku, kein Code. ## Befund Alf will die Anwenden-Seite „Spiele-Suche" zur App machen (Screenshot 2026-10-24): Header mit Titel-Suche und Cheverons für System/Sortierung, linke Sidebar mit Treffern, rechte Hauptansicht mit dem Material der Bibliotheken. Materialbestände gemessen: eXoDOS 43 Bildkategorien (Box-Front 5129, Gameplay-Screenshots 9585), Videos 4298 (namensgleich), Manuals; RetroDeck `ES-DE/downloaded_media/<sys>/` (covers/manuals/videos/screenshots), Metadaten in `ES-DE/gamelists/<sys>/gamelist.xml` (neu auszuwerten). Technik-Fall: panel_api gibt nur JSON zurück, `/plugins/{id}/file` bedient nur das Plugin-Paket → Medien als base64 aus neuem `media`-Befehl (sips-Cache), Videos/PDFs per `launch`/`open`. ## Geändert - PLAN.md: Sektion „Plan 0.5.0 — Spiele-Suche wird die Gamebox-App" (Layout, Segmente Store/Installiert, Aktionszeile Spielen/Installieren, Installieren-Sheet, `media`/`launch`, gamebox.json-Marker, Index-Erweiterung, Taktung zwei PRs / eine Version); Issue-Referenz im Kopf auf iris/iris-plugins#246 ergänzt. ## Geprüft PLAN.md gegen den gemessenen Stand von #235 und die Manifest-Grenzen (max. zwei Web-Views, panel_api-JSON-Vertrag) gelesen. ## Nicht geprüft Nichts auszuführen — reine Doku. Umsetzung folgt in zwei PRs (Fundament, dann App-Ansicht).
Author
Owner

PR #250 gemergt: feat(iris-gamebox): Fundament 0.5.0 — Index mit Medien und Metadaten, Befehle media/launch/apps/remove/detail (#246)
#250

Commits:

  • feat(iris-gamebox): Fundament 0.5.0 — Index mit Medien und Metadaten, Befehle media/launch/apps/remove/detail (#246)

Stand — PR 1: Fundament (Index-Medien, media, launch)

Plan-Abschnitt 1 von 2 („Taktung“ in der Beschreibung). Version bleibt 0.4.1 — die 0.5.0 kommt mit PR 2.

Befund

Die App-Ansicht braucht pro Spiel: Medienpfade (Cover, Screenshots, Video, Handbuch), Metadaten (Genre,
Spielerzahl, Beschreibung) und einen Weg, Bilder über panel_api (nur JSON) auszuliefern. Gemessen:
eXoDOS-Titel treffen per Stem-Suche (Doppelpunkt variiert je Kategorie) Box-Front 4587/7634, Gameplay-
Screenshots 6795, Videos 2981, Manuals 4011; RetroDeck-Dateien heißen exakt nach dem ROM-Stem, Metadaten
steigen durch die ES-DE-Gamelists (ES-DE/gamelists/<sys> für alle Systeme, das reichere
ES-DE/<sys>/gamelist.xml füllt Lücken): 1636/1737 Entwickler, 1687 Beschreibungen.

Geändert

  • Index-Schema v2 (INDEX_VERSION): pro Spiel m (relative Medienpfade, Screenshots gekappt auf 8)
    • genre/players/desc/play_mode; RetroDeck-Titel jetzt aus der Gamelist (statt ROM-Stem), Jahr aus
      releasedate. Alter Cache wird erkannt und neu aufgebaut (panel_api stößt den Hintergrundlauf an).
      Sidecar index/<quelle>.media.json (handle → Quelle+Medien, 2.5 MB) für die Bild-Auslieferung ohne
      Katalog-Lasten.
  • CLI: media HANDLE ART [--size thumb|full] [--index N] [--data-url] (sips → Mediacache, LRU 400),
    launch (Medium per open; --app nur Apps aus der Ablage, --reveal = Finder), apps.
  • panel_api: detail (Zeile + Metadaten + vorhandene Medienarten + Installiert-Marker), media
    (base64-data-URL), launch, apps, remove (nur das Bundle in der Ablage, nie ROM/BIOS in der Quelle).
  • gamebox.json-Marker in jedem gebauten Bundle (Handle/Titel/System/Bauzeit, auch für Apps von vorher
    über die Bundle-Kennung de.iris.gamebox.* erkennbar); installed_apps() keyed nach Handle.
  • Suche gewichtet: Titel stark, Entwickler/Publisher darunter, Genre nicht; exakter Dev/Pub-Treffer
    vor Teilstring („Eurocom“ → exacte Treffer vor „Eurocom Developments“).
  • Manifest: fünf neue panel_api-Befehle; Doku-Tabelle um apps/media/launch ergänzt.
  • GAMEBOX_HOME als Umgebungsvariable für die Datenheimat (Tests gegen Fake-Heimat).

Geprüft (gegen die echten Bibliotheken, Sandbox-Heimat via GAMEBOX_HOME)

  • Index-Aufbau 9370 Spiele in einem Lauf; Trefferquoten wie oben gemessen; eXoDOS-Jahr jetzt vollständig
    (7633/7633 — das XML liefert ISO-Datums, year_of fand dort kein (jjjj)).
  • media: thumb/full, Cache-Treffer 0,13 s, kalter sips-Lauf 0,1 s; fremde Pfade und unbekannte Handles
    abgewiesen. JPEG wo möglich (ohne Transparenz), PNG bei Alpha — Daumen 2–7 KB, Vollbild 69–835 KB;
    die panel_api-Antwort ist größenunbegrenzt (nur die Anfrage ist auf 64 KB begrenzt, Iris liest stdout
    vollständig), der 30-s-Timeout trägt locker.
  • launch-Grenzen: fremde App abgelehnt („Nur Apps aus der eingestellten Ablage“), Nicht-Gamebox-App
    abgelehnt; remove löscht nur markierte Bundles in der Ablage.
  • detail/apps/browse/media über panel_api (JSON-Vertrag), Marker-Roundtrip (make_app → installed_apps).
  • Suche-Regression: „flashback“/„contra“ wie bisher; Entwickler-/Publisher-Suche neu und richtig sortiert.
  • Latenz: browse 0,5 s, detail 0,2 s, media (gecacht) 0,13 s; py_compile, Manifest-JSON.

Nicht geprüft

  • open-Aufrufe ins echte System (Video/Handbuch/Start) nur gegen Fehlerpfade getestet — kein Fenster
    ausgehellt; die Erfolgszeile nicht beobachtet.
  • Index-Neubau auf einer Maschine mit 0.4.x-Cache (Migrationspfad alt→v2) — hier wurde frisch gebaut;
    der Versionsvergleich steht aber unter denselben Codezeilen wie der Fingerabdruck-Vergleich.
  • media unter Last (viele Daumen parallel beim Scrollen) und der LRU-Cache über 400 Einträge.
  • Alles in der echten Iris-Web-View (PR 2).

Grenzen: media skaliert nur PNG/JPG; Videos/Handbücher bleiben open-only (panel_api kann kein Streaming).

PR #250 gemergt: feat(iris-gamebox): Fundament 0.5.0 — Index mit Medien und Metadaten, Befehle media/launch/apps/remove/detail (#246) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/250 Commits: - feat(iris-gamebox): Fundament 0.5.0 — Index mit Medien und Metadaten, Befehle media/launch/apps/remove/detail (#246) --- # Stand — PR 1: Fundament (Index-Medien, `media`, `launch`) Plan-Abschnitt 1 von 2 („Taktung“ in der Beschreibung). Version bleibt 0.4.1 — die 0.5.0 kommt mit PR 2. ## Befund Die App-Ansicht braucht pro Spiel: Medienpfade (Cover, Screenshots, Video, Handbuch), Metadaten (Genre, Spielerzahl, Beschreibung) und einen Weg, Bilder über panel_api (nur JSON) auszuliefern. Gemessen: eXoDOS-Titel treffen per Stem-Suche (Doppelpunkt variiert je Kategorie) Box-Front 4587/7634, Gameplay- Screenshots 6795, Videos 2981, Manuals 4011; RetroDeck-Dateien heißen exakt nach dem ROM-Stem, Metadaten steigen durch die ES-DE-Gamelists (`ES-DE/gamelists/<sys>` für alle Systeme, das reichere `ES-DE/<sys>/gamelist.xml` füllt Lücken): 1636/1737 Entwickler, 1687 Beschreibungen. ## Geändert - **Index-Schema v2** (`INDEX_VERSION`): pro Spiel `m` (relative Medienpfade, Screenshots gekappt auf 8) + genre/players/desc/play_mode; RetroDeck-Titel jetzt aus der Gamelist (statt ROM-Stem), Jahr aus `releasedate`. Alter Cache wird erkannt und neu aufgebaut (panel_api stößt den Hintergrundlauf an). Sidecar `index/<quelle>.media.json` (handle → Quelle+Medien, 2.5 MB) für die Bild-Auslieferung ohne Katalog-Lasten. - **CLI**: `media HANDLE ART [--size thumb|full] [--index N] [--data-url]` (sips → Mediacache, LRU 400), `launch` (Medium per `open`; `--app` nur Apps aus der Ablage, `--reveal` = Finder), `apps`. - **panel_api**: `detail` (Zeile + Metadaten + vorhandene Medienarten + Installiert-Marker), `media` (base64-data-URL), `launch`, `apps`, `remove` (nur das Bundle in der Ablage, nie ROM/BIOS in der Quelle). - **gamebox.json-Marker** in jedem gebauten Bundle (Handle/Titel/System/Bauzeit, auch für Apps von vorher über die Bundle-Kennung `de.iris.gamebox.*` erkennbar); `installed_apps()` keyed nach Handle. - **Suche gewichtet**: Titel stark, Entwickler/Publisher darunter, Genre nicht; exakter Dev/Pub-Treffer vor Teilstring („Eurocom“ → exacte Treffer vor „Eurocom Developments“). - Manifest: fünf neue panel_api-Befehle; Doku-Tabelle um `apps`/`media`/`launch` ergänzt. - `GAMEBOX_HOME` als Umgebungsvariable für die Datenheimat (Tests gegen Fake-Heimat). ## Geprüft (gegen die echten Bibliotheken, Sandbox-Heimat via GAMEBOX_HOME) - Index-Aufbau 9370 Spiele in einem Lauf; Trefferquoten wie oben gemessen; eXoDOS-Jahr jetzt vollständig (7633/7633 — das XML liefert ISO-Datums, `year_of` fand dort kein `(jjjj)`). - `media`: thumb/full, Cache-Treffer 0,13 s, kalter sips-Lauf 0,1 s; fremde Pfade und unbekannte Handles abgewiesen. JPEG wo möglich (ohne Transparenz), PNG bei Alpha — Daumen 2–7 KB, Vollbild 69–835 KB; die panel_api-Antwort ist größenunbegrenzt (nur die Anfrage ist auf 64 KB begrenzt, Iris liest stdout vollständig), der 30-s-Timeout trägt locker. - `launch`-Grenzen: fremde App abgelehnt („Nur Apps aus der eingestellten Ablage“), Nicht-Gamebox-App abgelehnt; `remove` löscht nur markierte Bundles in der Ablage. - `detail`/`apps`/`browse`/`media` über panel_api (JSON-Vertrag), Marker-Roundtrip (make_app → installed_apps). - Suche-Regression: „flashback“/„contra“ wie bisher; Entwickler-/Publisher-Suche neu und richtig sortiert. - Latenz: browse 0,5 s, detail 0,2 s, media (gecacht) 0,13 s; `py_compile`, Manifest-JSON. ## Nicht geprüft - `open`-Aufrufe ins echte System (Video/Handbuch/Start) nur gegen Fehlerpfade getestet — kein Fenster ausgehellt; die Erfolgszeile nicht beobachtet. - Index-Neubau auf einer Maschine mit 0.4.x-Cache (Migrationspfad alt→v2) — hier wurde frisch gebaut; der Versionsvergleich steht aber unter denselben Codezeilen wie der Fingerabdruck-Vergleich. - `media` unter Last (viele Daumen parallel beim Scrollen) und der LRU-Cache über 400 Einträge. - Alles in der echten Iris-Web-View (PR 2). Grenzen: `media` skaliert nur PNG/JPG; Videos/Handbücher bleiben `open`-only (panel_api kann kein Streaming).
Author
Owner

PR #251 gemergt: feat(iris-gamebox): Spiele-Suche wird die Gamebox-App — Cover, Box-Art, Screenshots, Video/Handbuch, Segment Installiert (0.5.0, #246)
#251

Commits:

  • feat(iris-gamebox): Spiele-Suche wird die Gamebox-App — Cover, Box-Art, Screenshots, Video/Handbuch, Segment Installiert (0.5.0, #246)

Stand PR 2 (App-Ansicht) zu #246 — Fundament war PR 1 (#250, auf main).

Geändert:

  • web/search.html neu als Gamebox-App: Header (Suchfeld · Chevron System · Chevron Sortierung), Sidebar mit Segment „Store / Installiert", rechte Detailansicht. Store-Treffer mit Cover-Miniatur (lazy, IntersectionObserver, 3 parallele Anfragen, beim Umschalten verworfen). Installiert scannt nur die eingestellte Ablage (neueste Bauzeit zuerst, Filter aus der Kopfzeile gilt mit).
  • Detail: „Installieren" bzw. „Spielen" (+ „Neu bauen", „In der Ablage zeigen"), Metadaten-Kopf (System · Größe · Jahr · Entwickler · Publisher · Genre · Spielerzahl, Overview aufklappbar), Hauptbild Box Front mit Wechselstreifen der vorhandenen Kategorien, Galerie bis 8 Screenshots (Lightbox), „Gameplay-Video öffnen"/„Handbuch öffnen" über den neuen launch-Befehl (nichts eingebettet), fehlendes Material → Abschnitt entfällt.
  • Bau-Workflow im Installieren-Sheet (App-Name, Ablage, DOS-Menü-Tasten, Fortschritt; bei installierter App „Neu bauen" = remove+build, „Entfernen" = zweistufige Bestätigung, löscht nur das Bundle).
  • Manifest 0.5.0, quick_access_label „Gamebox"; Changelog nimmt den 0.4.1-Fix mit auf (0.4.1 nie veröffentlicht); Store-Seite/hero neu generiert; Docs und SKILL.md auf „Gamebox" gezogen; Konfigurations-Fußzeile mit.

Geprüft: HTML-Nesting und node --check beider Views; ID-Abgleich HTML↔JS; DOM-Logiktest gegen Fake-panel_api (Segmente, Lazy-Cover, Detail-Aktionszeile, Sheet „Neu bauen" = remove+build, Entfernen zweistufig, Galerie, Metadatenzeile) 25/25 grün; HTTP-Harness gegen echtes panel_api + echte Bibliotheken: browse 9370, detail DOOM mit 6 Medienarten, media thumb/full (89 KB), launch-Guard (fremder Pfad ab), remove-Guard (Quelle bleibt). Nebenbei launch-Erfolgspfad echt: QuickTime öffnete das Video.

Nicht geprüft: die Seite im echten Iris-Fenster (cfg_token, Web-View-Größen, Scroll-Feel), ein Bau-Durchlauf von der neuen Seite aus, Lightbox-Bilder am Auge.

Version 0.5.0 gebaut; Veröffentlichen wartet auf Alfs Wort.

PR #251 gemergt: feat(iris-gamebox): Spiele-Suche wird die Gamebox-App — Cover, Box-Art, Screenshots, Video/Handbuch, Segment Installiert (0.5.0, #246) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/251 Commits: - feat(iris-gamebox): Spiele-Suche wird die Gamebox-App — Cover, Box-Art, Screenshots, Video/Handbuch, Segment Installiert (0.5.0, #246) --- **Stand PR 2 (App-Ansicht) zu #246** — Fundament war PR 1 (#250, auf main). Geändert: - `web/search.html` neu als Gamebox-App: Header (Suchfeld · Chevron System · Chevron Sortierung), Sidebar mit Segment „Store / Installiert", rechte Detailansicht. Store-Treffer mit Cover-Miniatur (lazy, IntersectionObserver, 3 parallele Anfragen, beim Umschalten verworfen). Installiert scannt nur die eingestellte Ablage (neueste Bauzeit zuerst, Filter aus der Kopfzeile gilt mit). - Detail: „Installieren" bzw. „Spielen" (+ „Neu bauen", „In der Ablage zeigen"), Metadaten-Kopf (System · Größe · Jahr · Entwickler · Publisher · Genre · Spielerzahl, Overview aufklappbar), Hauptbild Box Front mit Wechselstreifen der vorhandenen Kategorien, Galerie bis 8 Screenshots (Lightbox), „Gameplay-Video öffnen"/„Handbuch öffnen" über den neuen `launch`-Befehl (nichts eingebettet), fehlendes Material → Abschnitt entfällt. - Bau-Workflow im Installieren-Sheet (App-Name, Ablage, DOS-Menü-Tasten, Fortschritt; bei installierter App „Neu bauen" = remove+build, „Entfernen" = zweistufige Bestätigung, löscht nur das Bundle). - Manifest 0.5.0, `quick_access_label` „Gamebox"; Changelog nimmt den 0.4.1-Fix mit auf (0.4.1 nie veröffentlicht); Store-Seite/hero neu generiert; Docs und SKILL.md auf „Gamebox" gezogen; Konfigurations-Fußzeile mit. Geprüft: HTML-Nesting und `node --check` beider Views; ID-Abgleich HTML↔JS; DOM-Logiktest gegen Fake-panel_api (Segmente, Lazy-Cover, Detail-Aktionszeile, Sheet „Neu bauen" = remove+build, Entfernen zweistufig, Galerie, Metadatenzeile) 25/25 grün; HTTP-Harness gegen echtes panel_api + echte Bibliotheken: browse 9370, detail DOOM mit 6 Medienarten, media thumb/full (89 KB), launch-Guard (fremder Pfad ab), remove-Guard (Quelle bleibt). Nebenbei `launch`-Erfolgspfad echt: QuickTime öffnete das Video. Nicht geprüft: die Seite im echten Iris-Fenster (cfg_token, Web-View-Größen, Scroll-Feel), ein Bau-Durchlauf von der neuen Seite aus, Lightbox-Bilder am Auge. Version 0.5.0 gebaut; Veröffentlichen wartet auf Alfs Wort.
Author
Owner

PR #253 gemergt: docs(iris-gamebox): PLAN.md — 0.5.0 veröffentlicht, Lessons Learned zur Registry-Chronik (#246)
#253

Commits:

  • docs(iris-gamebox): PLAN.md — 0.5.0 veröffentlicht, Lessons Learned zur Registry-Chronik (#246)
PR #253 gemergt: docs(iris-gamebox): PLAN.md — 0.5.0 veröffentlicht, Lessons Learned zur Registry-Chronik (#246) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/253 Commits: - docs(iris-gamebox): PLAN.md — 0.5.0 veröffentlicht, Lessons Learned zur Registry-Chronik (#246)
Author
Owner

PR #254 gemergt: fix(iris-gamebox): Installiert-Liste vollständig (Marker in allen Zweigen, Kennung-Rückschluss), Cover bleiben bei Auswahl, Gameplay-Video inline, Listfoot-Knopf repariert (0.5.1, #246)
#254

Commits:

  • fix(iris-gamebox): Installiert-Liste vollständig (Marker in allen Zweigen, Kennung-Rückschluss), Cover bleiben bei Auswahl, Gameplay-Video inline, Listfoot-Knopf repariert (0.5.1, #246)

Stand 0.5.1 — drei Funde aus Alfs Alltagstest, alle mit Live-Beweis an seiner echten Ablage (~/Documents/Gamedata) gemessen.

  1. „Installiert" zeigte nur eine von mehreren Apps. Zwei Ursachen: cmd_bundle gab das marker-Wörterbuch nur an bundle_retroarch weiter — DOS-Bundles (ScummVM/DOSBox-X) bekamen nie gamebox.json (an seiner Atlantis-App nachgewiesen: kein Marker, vier Arkade-Apps mit). Und Apps, die vor 0.5.0 gebaut wurden, haben den Marker grundsätzlich nie. Fix: alle drei Bundle-Zweige schreiben den Marker; installed_apps() erkennt Apps ohne Marker über die Bundle-Kennung de.iris.gamebox.<slug> rückwärts gegen die Titel-Slugs des Katalogs.

  2. Cover der Trefferliste verschwanden nach der Auswahl. select() rief render() (Liste komplett neu, alle Cover neu angefragt) und setzte danach ++mediaEpoch für das Detail — jede frische Cover-Antwort wurde als „veraltet" verworfen. Fix: zwei getrennte Verfalls-Zähler (listEpoch/detailEpoch), Auswahl markieren statt Liste neu bauen, die Bild-Warteschlange verwirft Veraltetes schon vor der Anfrage.

  3. Gameplay-Video jetzt inline statt separates Fenster. GET /plugins/{id}/file scheidet dafür aus (bedient nur das Plugin-Paket, octet-stream, kein Range-Streaming) — daher neuer Modus media size=preview: avconvert (macOS-Bordmittel) schneidet einen 6-Sekunden-H.264/AAC-Clip (480×360) in den Mediacache, die Seite zeigt ihn als stummes <video muted loop playsinline> mit Autoplay; „Ganzes Video öffnen" bleibt daneben (Standardprogramm).

Nebenbefund aus dem Screenshot: die Fußzeile der Trefferliste wurde per textContent gesetzt — der „mehr laden"-Knopf stand als roher HTML-Code da und war tot; jetzt innerHTML.

Geprüft: installed_apps() gegen die echte Ablage (5/5 Apps; Atlantis ohne Marker → Handle exo:alostt, detail meldet „installiert"); video_preview Erster Lauf (636 KB, 2,3 s) / Cache (0,02 s) / Nicht-MP4 weist ab; alle 4624 hinterlegten Videos sind MP4 (H.264/AAC), schlechtester Fall 66 MB → 778 KB in 3,2 s; DOM-Tests 29 grün inkl. Regression „Auswahl behält die Cover-Elemente"; node --check, py_compile.

Nicht geprüft: Inline-Autoplay im echten Iris-Fenster (Gesten-/Autoplay-Politik von WebKit), Vorschau-Qualität am Auge, Bau/Entfernen an einer rückgeschlossenen (markerlosen) App.

PR #254 gemergt: fix(iris-gamebox): Installiert-Liste vollständig (Marker in allen Zweigen, Kennung-Rückschluss), Cover bleiben bei Auswahl, Gameplay-Video inline, Listfoot-Knopf repariert (0.5.1, #246) https://forgejo.lewerken.duckdns.org/iris/iris-plugins/pulls/254 Commits: - fix(iris-gamebox): Installiert-Liste vollständig (Marker in allen Zweigen, Kennung-Rückschluss), Cover bleiben bei Auswahl, Gameplay-Video inline, Listfoot-Knopf repariert (0.5.1, #246) --- **Stand 0.5.1** — drei Funde aus Alfs Alltagstest, alle mit Live-Beweis an seiner echten Ablage (`~/Documents/Gamedata`) gemessen. 1. **„Installiert" zeigte nur eine von mehreren Apps.** Zwei Ursachen: `cmd_bundle` gab das `marker`-Wörterbuch nur an `bundle_retroarch` weiter — DOS-Bundles (ScummVM/DOSBox-X) bekamen nie `gamebox.json` (an seiner Atlantis-App nachgewiesen: kein Marker, vier Arkade-Apps mit). Und Apps, die vor 0.5.0 gebaut wurden, haben den Marker grundsätzlich nie. **Fix:** alle drei Bundle-Zweige schreiben den Marker; `installed_apps()` erkennt Apps ohne Marker über die Bundle-Kennung `de.iris.gamebox.<slug>` rückwärts gegen die Titel-Slugs des Katalogs. 2. **Cover der Trefferliste verschwanden nach der Auswahl.** `select()` rief `render()` (Liste komplett neu, alle Cover neu angefragt) und setzte danach `++mediaEpoch` für das Detail — jede frische Cover-Antwort wurde als „veraltet" verworfen. **Fix:** zwei getrennte Verfalls-Zähler (`listEpoch`/`detailEpoch`), Auswahl markieren statt Liste neu bauen, die Bild-Warteschlange verwirft Veraltetes schon vor der Anfrage. 3. **Gameplay-Video jetzt inline** statt separates Fenster. `GET /plugins/{id}/file` scheidet dafür aus (bedient nur das Plugin-Paket, `octet-stream`, kein Range-Streaming) — daher neuer Modus `media size=preview`: `avconvert` (macOS-Bordmittel) schneidet einen 6-Sekunden-H.264/AAC-Clip (480×360) in den Mediacache, die Seite zeigt ihn als stummes `<video muted loop playsinline>` mit Autoplay; „Ganzes Video öffnen" bleibt daneben (Standardprogramm). **Nebenbefund aus dem Screenshot:** die Fußzeile der Trefferliste wurde per `textContent` gesetzt — der „mehr laden"-Knopf stand als roher HTML-Code da und war tot; jetzt `innerHTML`. Geprüft: `installed_apps()` gegen die echte Ablage (5/5 Apps; Atlantis ohne Marker → Handle `exo:alostt`, `detail` meldet „installiert"); `video_preview` Erster Lauf (636 KB, 2,3 s) / Cache (0,02 s) / Nicht-MP4 weist ab; alle 4624 hinterlegten Videos sind MP4 (H.264/AAC), schlechtester Fall 66 MB → 778 KB in 3,2 s; DOM-Tests 29 grün inkl. Regression „Auswahl behält die Cover-Elemente"; `node --check`, `py_compile`. Nicht geprüft: Inline-Autoplay im echten Iris-Fenster (Gesten-/Autoplay-Politik von WebKit), Vorschau-Qualität am Auge, Bau/Entfernen an einer rückgeschlossenen (markerlosen) App.
Author
Owner

Geschlossen auf ausdrücklichen Wunsch von Alf; das Label status/zu-testen wurde dabei entfernt. Stand: siehe die Kommentare oben (veröffentlicht bis iris-gamebox 0.10.5).

Geschlossen auf ausdrücklichen Wunsch von Alf; das Label status/zu-testen wurde dabei entfernt. Stand: siehe die Kommentare oben (veröffentlicht bis iris-gamebox 0.10.5).
alf closed this issue 2026-10-27 10:23:46 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/iris-plugins#246
No description provided.