update
This commit is contained in:
46
CLAUDE.md
Normal file
46
CLAUDE.md
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# YouTube App
|
||||||
|
|
||||||
|
Selbst-gehostete Anwendung: YouTube-Videos per Browser Extension erfassen, auf einem Server speichern und per Kotlin-App auf Android/Android TV streamen und herunterladen.
|
||||||
|
|
||||||
|
## Dokumentation
|
||||||
|
|
||||||
|
- `systems.md` — Technologie-Stack pro Komponente
|
||||||
|
- `commication.md` — Kommunikationsflüsse zwischen den Systemen
|
||||||
|
- `features.md` — Konkrete Features und Benutzerinteraktionen
|
||||||
|
- `architecture.md` — Detaillierter Systemaufbau (Endpoints, Services, Models, Screens)
|
||||||
|
- `szenarios.md` — Benutzer-Szenarien
|
||||||
|
|
||||||
|
## Architektur
|
||||||
|
|
||||||
|
Drei Komponenten:
|
||||||
|
|
||||||
|
### Browser Extension (JavaScript, Manifest V3)
|
||||||
|
- Content Script liest YouTube-DOM aus, extrahiert Videodaten
|
||||||
|
- Background Script sendet Daten an Server (POST /videos)
|
||||||
|
|
||||||
|
### Server (Python, FastAPI, SQLite, yt-dlp + ffmpeg)
|
||||||
|
- REST API empfängt Videodaten, liefert Videolisten, triggert Downloads, streamt Videos
|
||||||
|
- yt-dlp lädt Videos von YouTube, speichert auf dem Server
|
||||||
|
- Beim Streamen wird das Video automatisch heruntergeladen, falls noch nicht geschehen
|
||||||
|
|
||||||
|
### App (Kotlin, Android/Android TV)
|
||||||
|
- Screens: AllVideos, Downloaded, VideoDetail, VideoPlayer
|
||||||
|
- Videos werden vom Server gestreamt, optional auf das Gerät heruntergeladen
|
||||||
|
- Lokale Videos werden bevorzugt abgespielt, sonst Stream
|
||||||
|
|
||||||
|
## API Endpoints
|
||||||
|
|
||||||
|
- `POST /videos` — Videodaten von Extension empfangen
|
||||||
|
- `GET /videos` — alle Videos abrufen
|
||||||
|
- `GET /videos/downloaded` — heruntergeladene Videos abrufen
|
||||||
|
- `POST /videos/{id}/download` — Download auf Server triggern
|
||||||
|
- `GET /videos/{id}/stream` — Video streamen
|
||||||
|
- `GET /videos/{id}/file` — Video-Datei zum Download auf Client ausliefern
|
||||||
|
|
||||||
|
## Entscheidungen
|
||||||
|
|
||||||
|
- Kein Jellyfin — erfüllt nicht die Anforderung, Videos vor dem Download aufzulisten
|
||||||
|
- Kein PostgreSQL/MySQL — SQLite reicht für den Prototyp
|
||||||
|
- Keine Benutzerprofile im Prototyp
|
||||||
|
- Videos werden auf dem Server gespeichert, Client speichert nur bei explizitem Download
|
||||||
|
- Sprache der Dokumentation: Deutsch
|
||||||
28
architecture.md
Normal file
28
architecture.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# Browser Extension
|
||||||
|
- Content Script — YouTube-DOM auslesen, Videodaten extrahieren
|
||||||
|
- Background Script — Daten an Server senden (POST /videos)
|
||||||
|
# Server
|
||||||
|
## API
|
||||||
|
- POST /videos — Videodaten von Extension empfangen
|
||||||
|
- GET /videos — alle Videos abrufen
|
||||||
|
- GET /videos/downloaded — heruntergeladene Videos abrufen
|
||||||
|
- POST /videos/{id}/download — Download triggern
|
||||||
|
- GET /videos/{id}/stream — Video streamen
|
||||||
|
- GET /videos/{id}/file — Video-Datei zum Download ausliefern
|
||||||
|
## Services
|
||||||
|
- VideoService — Videos speichern, abrufen, Status verwalten
|
||||||
|
- DownloadService — yt-dlp aufrufen, Download-Status tracken
|
||||||
|
## Model
|
||||||
|
- Video — id, title, youtuber, thumbnail_url, youtube_url, file_path
|
||||||
|
# App
|
||||||
|
## Screens
|
||||||
|
- AllVideosScreen — alle Videos als Cards
|
||||||
|
- DownloadedVideosScreen — heruntergeladene Videos als Cards
|
||||||
|
- VideoDetailScreen — Starten, Download, Zurück
|
||||||
|
- VideoPlayerScreen — Player mit Standard-Controls
|
||||||
|
## ViewModel
|
||||||
|
- VideoViewModel — Video-State verwalten, API-Aufrufe triggern, lokal bevorzugen sonst streamen
|
||||||
|
## API
|
||||||
|
- ServerApi — kommuniziert mit FastAPI (GET /videos, POST /download, GET /stream, GET /videos/{id}/file)
|
||||||
|
## Model
|
||||||
|
- Video — id, title, youtuber, thumbnailUrl, youtubeUrl, isDownloaded, localFilePath
|
||||||
17
commication.md
Normal file
17
commication.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Browser Extension intern
|
||||||
|
- Videodaten erfassen
|
||||||
|
# Browser Extension -> Server
|
||||||
|
- Videodaten senden
|
||||||
|
# Server intern
|
||||||
|
- Videodaten persistieren
|
||||||
|
- Video herunterladen
|
||||||
|
# Server -> App
|
||||||
|
- Video streamen
|
||||||
|
- Videodatei senden
|
||||||
|
# App -> Server
|
||||||
|
- Videos abrufen
|
||||||
|
- Video download anfragen
|
||||||
|
- Video stream anfragen
|
||||||
|
# App intern
|
||||||
|
- Video streamen anfragen
|
||||||
|
- Video downloaden anfragen
|
||||||
13
features.md
Normal file
13
features.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Aufgaben
|
||||||
|
## Browser
|
||||||
|
- Youtube Videos werden erfasst
|
||||||
|
- Videodaten (Titel, Youtuber, Bild, Url) werden nach dem erfassen an den Server gesendet
|
||||||
|
- Extension hat keine Einstellung
|
||||||
|
## App
|
||||||
|
- Ansicht: Navigation mit Alle Videos, Heruntergeladen
|
||||||
|
- Alle Videos: Videos als Cards auflisten (Untereinander: Bild, Youtuber, Titel)
|
||||||
|
- Heruntergeladen: Heruntergeladene Videos als Cards auflisten (Untereinander: Bild, Youtuber, Titel)
|
||||||
|
- Klick auf Card zeigt die Videoübersicht (Starten, Download, Zurück)
|
||||||
|
- Klick auf Startet startet dem Stream mit den Standard Video-Controls
|
||||||
|
- Klick auf Download lädt das Video herunter und übertragt es auf den Client
|
||||||
|
- Beim streamen wird das Video heruntergeladen, wenn noch nicht geschehen
|
||||||
19
plan.md
19
plan.md
@@ -1,19 +0,0 @@
|
|||||||
Browser Extension:
|
|
||||||
|
|
||||||
Profilauswahl pro User
|
|
||||||
Erkennt YouTube-Suchergebnisse im DOM
|
|
||||||
Extrahiert Video-ID, Titel, Thumbnail
|
|
||||||
Sendet Daten mit Profil-Zuordnung an lokalen Server
|
|
||||||
|
|
||||||
Server (Ubuntu Desktop lokal):
|
|
||||||
|
|
||||||
Empfängt Video-Daten, ordnet sie dem Profil zu
|
|
||||||
Download via yt-dlp + sofortiges Streaming
|
|
||||||
Jellyfin als Media Server mit Benutzerprofilen
|
|
||||||
|
|
||||||
Clients:
|
|
||||||
|
|
||||||
Smart TV / Fire Stick via Jellyfin App (jeder loggt sich in sein Profil ein)
|
|
||||||
Android App optional als mobiler Player
|
|
||||||
|
|
||||||
Prototyp: Hetzner CAX11, später lokal.
|
|
||||||
9
systems.md
Normal file
9
systems.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# Browser Extension
|
||||||
|
- Javascript: Daten angezeigter Videos an Server senden
|
||||||
|
# Server
|
||||||
|
- FastAPI: Videodaten empfangen
|
||||||
|
- python: Downlods triggern, Videos streamen
|
||||||
|
- yt-dlp + ffmpeg: Video herunterladen
|
||||||
|
- SQLite: Daten persistieren
|
||||||
|
# App
|
||||||
|
- Kotlin: Videos auflisten, Download triggern, Videos abspielen
|
||||||
8
szenarios.md
Normal file
8
szenarios.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Szenario 1
|
||||||
|
- Benutzer geht auf die Youtube Startseite -> Alle auf der Seite sichtbaren Youtube Videos werden erfasst
|
||||||
|
- Benutzer öffnet die App -> Alle eben sichtbaren Videos werden angezeigt
|
||||||
|
- Benutzer klickt auf ein Video -> In der Übersicht auf Starten -> Das Video wird abgespielt
|
||||||
|
# Szenario 2
|
||||||
|
- Benutzer öffnet die App -> Klickt auf ein Video -> In der Übersicht auf Download
|
||||||
|
- Das Internet fällt aus -> Benutzer öffnet die App -> Geht auf heruntergeladene Videos
|
||||||
|
- Das vorhin heruntergeladene Video wird angezeigt -> Übersicht Abspielen -> Video wird abgespielt
|
||||||
Reference in New Issue
Block a user