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