mirror of
https://github.com/Andre-Bzk/twitch4steamdeck.git
synced 2026-11-15 15:43:08 +01:00
Fix: Streamlink auth header entfernt, mpv-Pfad explizit aufgelöst Livestream wird kann jetzt abgespielt werden
5.2 KiB
5.2 KiB
Twitch4SteamDeck — TODO
Checkboxen-Tracker. Nach jedem erledigten Punkt sofort abhaken und kurzes Update in
CLAUDE_PROGRESS.mdergänzen.
Phase 0 — Projekt-Skelett
package.json, tsconfig (root/node/web)electron.vite.config.ts,electron-builder.yml,.gitignore- Main-Stub mit BrowserWindow
- Preload-Stub mit
contextBridge - Renderer (React + Big-Screen-Baseline-CSS)
- Smoke-Test:
npm install && npm run devzeigt Fenster
Phase 1 — Twitch OAuth Device Code Flow
deviceCodeFlow.ts(request + polling + refresh)tokenStore.ts(safeStorage-Persistenz)authService.ts(Lifecycle + EventEmitter)- IPC-Handler + Preload-Bridge
LoginScreen.tsx(QR + Code + Countdown)App.tsxRouting nach Auth-Status.env.example- End-to-End-Verifikation durch User (Login mit echter Twitch-App durchführen)
- Token-Persistenz prüfen: App-Neustart → bleibt eingeloggt
- Logout testen:
userData/twitch-tokens.binwird gelöscht (später)
Phase 2 — Twitch Helix-Client + Followed-Channels-Home-Screen
src/main/twitch/types.ts(Helix-Response-Typen)src/main/twitch/helixClient.ts(fetch-Wrapper, Auth-Header, Client-ID-Header, Paginierung)- Helix-Endpoints implementieren:
GET /users(eigener User → user_id cachen)GET /channels/followed?user_id=…(paginiert)GET /streams?user_id=…(batched, max 100 IDs pro Call)
- IPC:
twitch:get-followedregistrieren (merged live-Status + Avatar) - Preload-API erweitern:
window.t4sd.twitch.getFollowed FollowingScreen.tsx— Karten-Grid mit Live-Indicator, Vorschaubild, Titel, Zuschauerzahl- Spatial-Navigation: eigene Implementierung (Arrow-Keys + Region-Switch Sidebar ↔ Main)
- Gamepad-Service:
src/renderer/src/input/gamepad.ts(Gamepad-API → Keyboard-Events) FocusableCard.tsx— Block-Layout, Avatar + Name + Titel + Spiel + Viewer-BadgeAppShell.tsx+Sidebar.tsx— Layout mit linker Navigation (Du folgst / Durchsuchen / Mein Account)Icons.tsx— inline SVG-Icons (Heart, Compass, User)BrowseScreen.tsx+AccountScreen.tsx— Platzhalter-Screens mit Logout- End-to-End-Verifikation durch User (2026-04-07: Karten + Tastatur-Nav bestätigt)
Phase 3 — Streamlink + mpv (Live-Wiedergabe)
Vorab (Dev-Setup, Windows)
- User:
mpvinstallieren —winget install shinchiro.mpv, viasetxzum PATH - User:
streamlinkinstallieren —winget install streamlink(8.2.1) - User: Baseline-Test erfolgreich:
streamlink --twitch-disable-ads twitch.tv/streamerhouse best --player mpv
Backend (Main-Prozess)
src/main/playback/types.tssrc/main/playback/streamlink.ts—resolveStreamlinkBin()(Win32-Pfad-Auflösung),spawnStreamlink()mit--player mpv --player-args "..."(Variante 2)src/main/playback/mpvController.ts— Named Pipe (Win32) / Unix Socket (Linux), connect mit Retry,quit(),disconnect()src/main/playback/playbackService.ts- IPC-Kanäle:
playback:start-live,playback:stop,playback:event
Renderer (UI)
- Preload +
t4sd.d.tserweitern:window.t4sd.playback.{startLive, stop, onEvent} src/renderer/src/screens/ChannelScreen.tsx(Hero + Live-Button + Zustandsanzeige)- Routing in
AppShell.tsx:selectedChannel-State →ChannelScreen FocusableCard.onSelect→ setztselectedChannelviaonSelectChannel-Prop- Spatial-Nav: Escape/B im ChannelScreen → Stop oder Zurück
Verifikation
- mpv PATH-Problem lösen (VS Code neu starten, dann testen — siehe CLAUDE_PROGRESS.md)
- 5 min Live-Stream ohne Werbe-Unterbrechung auf Windows (Dev-Setup)
- Beim Stop: mpv-Fenster schließt sich sauber, streamlink-Prozess terminiert, keine Zombie-Prozesse im Task-Manager
- Logout/Login und erneutes Starten funktioniert ohne App-Neustart
Phase 4 — VOD-Browsing + -Wiedergabe
- Helix
GET /videos?user_id=…&type=archive(paginiert) - VOD-Listen-Screen pro Channel
playback:start-vod(mit optionaler Resume-Position)- mpv-Resume:
--start=<seconds>beim Spawn
Phase 5 — Lokaler VOD-Verlauf
- SQLite-Setup:
src/main/store/db.ts(better-sqlite3, Migrations) historyRepo.tsmitvod_history-Tabelle (siehe plan.md)- mpv
time-pos-Observer schreibt alle ~5s in DB - „Continue Watching"-Reihe auf HomeScreen
- Auto-Complete bei >95% Wiedergabefortschritt
Phase 6 — Flatpak-Packaging
flatpak/tv.twitch4steamdeck.App.ymlManifest (Runtime, Module, Permissions)- mpv + streamlink als Flatpak-Module bündeln
- Test-Build:
flatpak-builder --user --install build-dir flatpak/…yml - Auf Steam Deck (oder VM) installieren und Login + Live + VOD durchspielen
- Als Non-Steam-Game in Gaming Mode hinzufügen, dort testen
Post-MVP (bewusst nicht im ersten Release)
- Chat (Live + VOD-Replay) inkl. BTTV/FFZ/7TV
- Suche / Kategorien-Browsing
- Eigene Twitch-Client-ID im Build verankert
- README mit Disclaimer (ToS) + Setup-Anleitung
- Flathub-Einreichung