⚙️ 🤖 Projekt-Grundgerüst + Tray-Machbarkeits-Spike #1

Closed
opened 2026-08-23 23:19:05 +02:00 by holm · 1 comment
Owner
Dimension Bewertung Einschätzung
Aufwand ██░░░░░░░░ Niedrig — Scope geklärt, Spike bereits gelaufen
Nutzen █████████░ Sehr hoch — legt Backend- und Tray-Entscheidung fest, ohne die kein weiterer Code sinnvoll ist
Bruchhäufigkeit █░░░░░░░░░ Einmalig — Projektstart
Nachhaltigkeit ████████░░ Hoch — Entscheidung bleibt für die gesamte Projektlaufzeit gültig
Dringlichkeit ███████░░░ Hoch — blockiert den eigentlichen Player-Code

Scope (mit Holm geklärt)

  • Inhalt: Audiobookshelf, eigenes Medienauswahlfenster.
  • Wiedergabe: zuerst ABS' eigenen Web-Player in einem Chromium-<webview> versuchen zu steuern; falls das nicht sauber geht, eigener Nachbau mit eigenem Play. Radiotray-Steuerung/-Nachbau folgt später (2a).
  • Nur Audio. Electron oder reiner JS-Player, Entscheidung fällt beim Bau je nach ABS-Webview-Verhalten.

Tray-Machbarkeit — gemessen, nicht angenommen

Erste Annahme (aus dem Projekt-Seed) war, Hide-to-Systray habe auf dieser Maschine kein Ziel (_NET_SYSTEM_TRAY_S0 via xprop -root = not found, kein SNI-Watcher). Das war ein Messfehler: xprop -root fragt eine Root-Window-Property ab, die Tray-Manager-Zuständigkeit ist aber eine Selection — der Befehl liefert bei diesem Namen praktisch immer "not found", unabhängig vom tatsächlichen Zustand.

Tatsächlicher Befund (Live-Spike mit Electron Tray + rohem BGRA-Bitmap, kein SNI-Watcher aktiv, GTK-Apps fallen automatisch auf XEmbed zurück): Ein Electron-Fenster mit new Tray(icon) embedded sich klaglos in polybars bestehende internal/tray-Pille (bar/statbar). Kindfenster-Zahl der Bar: 6 → 7 nach Tray-Start, zurück auf 6 nach Kill. Von Holm visuell bestätigt (rotes Icon sichtbar).

Ergebnis: Weg 1 (in den bestehenden Tray schreiben) trägt sofort — keine SNI-Brücke, keine libappindicator-Zusatzpakete nötig.

Was in diesem Commit liegt

  • shell.nix (Electron, FlipDrop-Muster übernommen)
  • spikes/tray-spike.js + package.json — der oben beschriebene Wegwerf-Spike, als Beleg im Repo belassen statt gelöscht
  • Standard-Dateiset (.gitignore, LICENSE, cliff.toml, CHANGELOG.md, README.md, CLAUDE.md)

🤖 angelegt von Claude v00 (API/Token holm)

| Dimension | Bewertung | Einschätzung | |---|---|---| | Aufwand | `██░░░░░░░░` | Niedrig — Scope geklärt, Spike bereits gelaufen | | Nutzen | `█████████░` | Sehr hoch — legt Backend- und Tray-Entscheidung fest, ohne die kein weiterer Code sinnvoll ist | | Bruchhäufigkeit | `█░░░░░░░░░` | Einmalig — Projektstart | | Nachhaltigkeit | `████████░░` | Hoch — Entscheidung bleibt für die gesamte Projektlaufzeit gültig | | Dringlichkeit | `███████░░░` | Hoch — blockiert den eigentlichen Player-Code | ## Scope (mit Holm geklärt) - Inhalt: Audiobookshelf, eigenes Medienauswahlfenster. - Wiedergabe: zuerst ABS' eigenen Web-Player in einem Chromium-`<webview>` versuchen zu steuern; falls das nicht sauber geht, eigener Nachbau mit eigenem Play. Radiotray-Steuerung/-Nachbau folgt später (2a). - Nur Audio. Electron oder reiner JS-Player, Entscheidung fällt beim Bau je nach ABS-Webview-Verhalten. ## Tray-Machbarkeit — gemessen, nicht angenommen Erste Annahme (aus dem Projekt-Seed) war, Hide-to-Systray habe auf dieser Maschine kein Ziel (`_NET_SYSTEM_TRAY_S0` via `xprop -root` = not found, kein SNI-Watcher). Das war ein Messfehler: `xprop -root` fragt eine Root-Window-**Property** ab, die Tray-Manager-Zuständigkeit ist aber eine **Selection** — der Befehl liefert bei diesem Namen praktisch immer "not found", unabhängig vom tatsächlichen Zustand. Tatsächlicher Befund (Live-Spike mit Electron `Tray` + rohem BGRA-Bitmap, kein SNI-Watcher aktiv, GTK-Apps fallen automatisch auf XEmbed zurück): Ein Electron-Fenster mit `new Tray(icon)` embedded sich klaglos in polybars bestehende `internal/tray`-Pille (`bar/statbar`). Kindfenster-Zahl der Bar: 6 → 7 nach Tray-Start, zurück auf 6 nach Kill. Von Holm visuell bestätigt (rotes Icon sichtbar). **Ergebnis: Weg 1 (in den bestehenden Tray schreiben) trägt sofort — keine SNI-Brücke, keine `libappindicator`-Zusatzpakete nötig.** ## Was in diesem Commit liegt - `shell.nix` (Electron, FlipDrop-Muster übernommen) - `spikes/tray-spike.js` + `package.json` — der oben beschriebene Wegwerf-Spike, als Beleg im Repo belassen statt gelöscht - Standard-Dateiset (`.gitignore`, `LICENSE`, `cliff.toml`, `CHANGELOG.md`, `README.md`, `CLAUDE.md`) > 🤖 angelegt von Claude v00 (API/Token holm)
Author
Owner

Erledigt — Commit 9bb93de auf main+dev gepusht.

Beleg: Standard-Dateiset liegt (.gitignore, LICENSE, cliff.toml, CHANGELOG.md, README.md, CLAUDE.md), shell.nix fuer Electron, Tray-Spike unter spikes/ dokumentiert das Messergebnis (Kindfenster-Zahl der statbar-Polybar-Instanz 6→7→6, von Holm visuell bestaetigt: rotes Icon sichtbar).

🤖 Kommentar von Claude v00 (API/Token holm)

**Erledigt** — Commit [`9bb93de`](https://forgejo.mueller.network/holm.tools.public/playzen/commit/9bb93deb74f15b3b0528be5d6ae938728b3c6f27) auf `main`+`dev` gepusht. Beleg: Standard-Dateiset liegt (`.gitignore`, `LICENSE`, `cliff.toml`, `CHANGELOG.md`, `README.md`, `CLAUDE.md`), `shell.nix` fuer Electron, Tray-Spike unter `spikes/` dokumentiert das Messergebnis (Kindfenster-Zahl der `statbar`-Polybar-Instanz 6→7→6, von Holm visuell bestaetigt: rotes Icon sichtbar). > 🤖 Kommentar von Claude v00 (API/Token holm)
holm closed this issue 2026-08-23 23:23:15 +02:00
Sign in to join this conversation.
No description provided.