Files
ripster/docs/architecture/frontend.md

5.5 KiB
Raw Blame History

Frontend-Komponenten

Das Frontend ist mit React 18 und PrimeReact gebaut und kommuniziert über REST-API und WebSocket mit dem Backend.


Seiten (Pages)

DashboardPage.jsx

Die Hauptseite von Ripster zeigt den aktuellen Pipeline-Status und ermöglicht alle Workflow-Aktionen.

Funktionen:

  • Anzeige des aktuellen Pipeline-Zustands (IDLE, ANALYZING, RIPPING, ENCODING, ...)
  • Live-Fortschrittsbalken mit ETA
  • Trigger für Metadaten-Dialog
  • Playlist-Entscheidungs-UI (bei Blu-ray Obfuskierung)
  • Encode-Review mit Track-Auswahl
  • Job-Steuerung (Start, Abbruch, Retry)

Zugehörige Komponenten:

  • PipelineStatusCard Status-Widget
  • MetadataSelectionDialog OMDb-Suche und Playlist-Auswahl
  • MediaInfoReviewPanel Track-Auswahl vor dem Encoding
  • DiscDetectedDialog Benachrichtigung bei Disc-Erkennung

SettingsPage.jsx

Konfigurationsoberfläche für alle Ripster-Einstellungen.

Funktionen:

  • Dynamisch generiertes Formular aus dem Settings-Schema
  • Echtzeit-Validierungsfeedback
  • PushOver-Verbindungstest
  • Automatische Aktualisierung des Encode-Reviews bei relevanten Änderungen

HistoryPage.jsx

Job-Historie mit vollständigem Audit-Trail.

Funktionen:

  • Sortier- und filterbares Job-Verzeichnis
  • Statusfilter (FINISHED, ERROR, WAITING_FOR_USER_DECISION, ...)
  • Job-Detail-Dialog mit vollständigen Logs
  • Re-Encode, Löschen und Metadaten-Zuweisung
  • Import von Orphan-Raw-Ordnern

Komponenten (Components)

MetadataSelectionDialog.jsx

Dialog für die Metadaten-Auswahl nach der Disc-Analyse.

┌─────────────────────────────────────┐
│ Metadaten auswählen                 │
├─────────────────────────────────────┤
│ Suche: [Inception              ] 🔍 │
├─────────────────────────────────────┤
│ Ergebnisse:                         │
│ ▶ Inception (2010)  Movie          │
│   Inception: ... (2011)  Series    │
├─────────────────────────────────────┤
│ Playlist (nur Blu-ray):             │
│ ▶ 00800.mpls (2:30:15) ✓ Empfohlen  │
│   00801.mpls (0:01:23)              │
├─────────────────────────────────────┤
│                   [Bestätigen]      │
└─────────────────────────────────────┘

MediaInfoReviewPanel.jsx

Track-Auswahl-Panel vor dem Encoding.

┌─────────────────────────────────────┐
│ Encode-Review                       │
├─────────────────────────────────────┤
│ Audio-Tracks:                       │
│ ☑ Track 1: Deutsch (AC-3, 5.1)     │
│ ☑ Track 2: English (TrueHD, 7.1)   │
│ ☐ Track 3: Français (AC-3, 2.0)    │
├─────────────────────────────────────┤
│ Untertitel:                         │
│ ☑ Track 1: Deutsch                  │
│ ☐ Track 2: English                  │
├─────────────────────────────────────┤
│              [Encodierung starten]  │
└─────────────────────────────────────┘

DynamicSettingsForm.jsx

Wiederverwendbares Formular, das aus dem Settings-Schema generiert wird.

Unterstützte Feldtypen:

Typ UI-Element
string Text-Input
number Zahlen-Input mit Min/Max
boolean Toggle/Checkbox
select Dropdown
password Passwort-Input

PipelineStatusCard.jsx

Status-Anzeige-Widget für die Dashboard-Seite.

JobDetailDialog.jsx

Vollständiger Job-Detail-Dialog mit Logs-Viewer.


Hooks

useWebSocket.js

Zentraler Custom-Hook für die WebSocket-Verbindung.

const { status, lastMessage } = useWebSocket({
  onMessage: (msg) => {
    if (msg.type === 'PIPELINE_STATE_CHANGE') {
      setPipelineState(msg.data);
    }
  }
});

Features:

  • Automatische Verbindung zu /ws
  • Reconnect mit exponential backoff
  • Message-Parsing (JSON)
  • Status-Tracking (connecting, connected, disconnected)

API-Client (client.js)

Zentraler HTTP-Client für alle Backend-Anfragen.

// Beispiel-Aufrufe
const state = await api.getPipelineState();
const results = await api.searchOmdb('Inception');
await api.selectMetadata(jobId, omdbData, playlist);
await api.confirmEncode(jobId, { audioTracks: [0, 1], subtitleTracks: [0] });

Features:

  • Zentralisierte Fehlerbehandlung
  • Automatische JSON-Serialisierung
  • Basis-URL aus Umgebungsvariable (VITE_API_BASE)

Build & Entwicklung

Entwicklungsserver

cd frontend
npm run dev
# → http://localhost:5173

Vite-Proxy-Konfiguration

In der Entwicklungsumgebung proxied Vite API-Anfragen zum Backend:

// vite.config.js
proxy: {
  '/api': 'http://localhost:3001',
  '/ws': { target: 'ws://localhost:3001', ws: true }
}

Production-Build

cd frontend
npm run build
# → frontend/dist/