iris-gamebox 0.5.0: Spiele-Suche wird die Gamebox-App — Header, Treffer-Sidebar, Material-Detailansicht #246
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/iris-plugins#246
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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")launch) bzw. „Installieren"; secondary „In der Ablage zeigen".launchim Standardprogramm; kein Einbetten (panel_api kann nur JSON, kein Streaming).Material (gemessen 2026-10-24)
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.ES-DE/downloaded_media/<system>/: covers/manuals/videos/screenshots/marquees/miximages/physicalmedia (psx: 503/286/501/…); Metadaten (desc, developer, publisher, genre, releasedate, players) inES-DE/gamelists/<system>/gamelist.xml— wird neu ausgewertet.Technik
cover-Befehl, auf alle Medienarten erweitert. RetroDeck-Metadaten aus gamelist.xml.media-Befehl (panel_api): {handle, art, index, size} → skaliert mitsipsin 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):openauf App-Bundle/MP4/PDF — nur aus konfigurierter Ablage/Bibliotheken.Contents/Resources/gamebox.jsonmit Handle; Abgleich der Ablage beim Select, nicht über den App-Namen.quick_access_label„Gamebox"; panel_api-Befehlemedia,launchergänzen.Taktung
Ein Issue, zwei PRs, eine Version 0.5.0:
media/launch(CLI-testbar, ohne UI-Zwang).search.htmlneu auf dem Fundament.Entscheidungen (mit Nutzer geklärt 2026-10-24)
launch.open, kein Streaming, kein Vor-Generieren aller Medien.PR #247 gemergt: docs(iris-gamebox): PLAN.md — Plan 0.5.0 Gamebox-App (#246)
#247
Commits:
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 inES-DE/gamelists/<sys>/gamelist.xml(neu auszuwerten). Technik-Fall: panel_api gibt nur JSON zurück,/plugins/{id}/filebedient nur das Plugin-Paket → Medien als base64 aus neuemmedia-Befehl (sips-Cache), Videos/PDFs perlaunch/open.Geändert
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 #250 gemergt: feat(iris-gamebox): Fundament 0.5.0 — Index mit Medien und Metadaten, Befehle media/launch/apps/remove/detail (#246)
#250
Commits:
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 reichereES-DE/<sys>/gamelist.xmlfüllt Lücken): 1636/1737 Entwickler, 1687 Beschreibungen.Geändert
INDEX_VERSION): pro Spielm(relative Medienpfade, Screenshots gekappt auf 8)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 ohneKatalog-Lasten.
media HANDLE ART [--size thumb|full] [--index N] [--data-url](sips → Mediacache, LRU 400),launch(Medium peropen;--appnur Apps aus der Ablage,--reveal= Finder),apps.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).über die Bundle-Kennung
de.iris.gamebox.*erkennbar);installed_apps()keyed nach Handle.vor Teilstring („Eurocom“ → exacte Treffer vor „Eurocom Developments“).
apps/media/launchergänzt.GAMEBOX_HOMEals Umgebungsvariable für die Datenheimat (Tests gegen Fake-Heimat).Geprüft (gegen die echten Bibliotheken, Sandbox-Heimat via GAMEBOX_HOME)
(7633/7633 — das XML liefert ISO-Datums,
year_offand dort kein(jjjj)).media: thumb/full, Cache-Treffer 0,13 s, kalter sips-Lauf 0,1 s; fremde Pfade und unbekannte Handlesabgewiesen. 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-Appabgelehnt;
removelöscht nur markierte Bundles in der Ablage.detail/apps/browse/mediaüber panel_api (JSON-Vertrag), Marker-Roundtrip (make_app → installed_apps).py_compile, Manifest-JSON.Nicht geprüft
open-Aufrufe ins echte System (Video/Handbuch/Start) nur gegen Fehlerpfade getestet — kein Fensterausgehellt; die Erfolgszeile nicht beobachtet.
der Versionsvergleich steht aber unter denselben Codezeilen wie der Fingerabdruck-Vergleich.
mediaunter Last (viele Daumen parallel beim Scrollen) und der LRU-Cache über 400 Einträge.Grenzen:
mediaskaliert nur PNG/JPG; Videos/Handbücher bleibenopen-only (panel_api kann kein Streaming).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:
Stand PR 2 (App-Ansicht) zu #246 — Fundament war PR 1 (#250, auf main).
Geändert:
web/search.htmlneu 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).launch-Befehl (nichts eingebettet), fehlendes Material → Abschnitt entfällt.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 --checkbeider 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). Nebenbeilaunch-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 #253 gemergt: docs(iris-gamebox): PLAN.md — 0.5.0 veröffentlicht, Lessons Learned zur Registry-Chronik (#246)
#253
Commits:
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:
Stand 0.5.1 — drei Funde aus Alfs Alltagstest, alle mit Live-Beweis an seiner echten Ablage (
~/Documents/Gamedata) gemessen.„Installiert" zeigte nur eine von mehreren Apps. Zwei Ursachen:
cmd_bundlegab dasmarker-Wörterbuch nur anbundle_retroarchweiter — DOS-Bundles (ScummVM/DOSBox-X) bekamen niegamebox.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-Kennungde.iris.gamebox.<slug>rückwärts gegen die Titel-Slugs des Katalogs.Cover der Trefferliste verschwanden nach der Auswahl.
select()riefrender()(Liste komplett neu, alle Cover neu angefragt) und setzte danach++mediaEpochfü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.Gameplay-Video jetzt inline statt separates Fenster.
GET /plugins/{id}/filescheidet dafür aus (bedient nur das Plugin-Paket,octet-stream, kein Range-Streaming) — daher neuer Modusmedia 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
textContentgesetzt — der „mehr laden"-Knopf stand als roher HTML-Code da und war tot; jetztinnerHTML.Geprüft:
installed_apps()gegen die echte Ablage (5/5 Apps; Atlantis ohne Marker → Handleexo:alostt,detailmeldet „installiert");video_previewErster 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.
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).