0ea5f10b31
Ampel / ampel (push) Failing after 12m31s
- Metadaten-Preview WIEDERHERGESTELLT (Stub ueberschattete echte prescan-Implementierung), tote Altmodule geloescht - Celery update_state statt Phantom-Task/erfundener API - abcde-Kommando korrigiert (CD-Ripping war nie funktionsfaehig) - JWT: fester Schluessel Pflicht, echtes Logout, Cleanup nur Abgelaufene - main.py: crashende Endpoints (Path/secrets/api_keys), year-Bug, Admin-Login aus .env - Ruff gruen (29 Funde), Tests: auth/cache_keys/ripping_helpers, Placebo-test_health raus - SAVEPOINT: offene MakeMKV-Entscheidung SICHTBAR gemacht (Regel B)
105 lines
4.5 KiB
Markdown
105 lines
4.5 KiB
Markdown
# SAVEPOINT — Rippy
|
|
|
|
## Aktueller Stand
|
|
|
|
**v1.10 — Complete Dark Mode Implementation (22.07.2026)**
|
|
|
|
Rippy läuft auf Arcane VM (192.168.178.162):
|
|
- ✅ Arcane WebUI: http://192.168.178.162:3552
|
|
- ✅ Rippy UI: http://192.168.178.162:80
|
|
- ✅ Rippy API: http://192.168.178.162:8000
|
|
- ✅ Theme Context ausgelagert (App.tsx → ThemeContext.tsx + useDarkMode.ts)
|
|
- ✅ Config Validation mit TMDB-API-Key Pflicht
|
|
- ✅ Cache Key Centralization (cache/keys.py)
|
|
- ✅ Dark Mode mit Theme-Toggle und localStorage persistence (UI-Only)
|
|
- ✅ **Alle UI-Komponenten komplett auf Dark Mode aktualisiert:**
|
|
- `App.tsx`, `Dashboard.tsx`, `Settings.tsx`, `MetadataPreview.tsx`
|
|
- ✅ Sidebar Navigation mit Dark Mode Support
|
|
- ✅ Einstellungen-Page mit Tab-Struktur
|
|
- ✅ Doppelte Arcane-Einträge behoben (`rippy` statt `Rippy`)
|
|
- ✅ Import-Fixes (relative → absolute Imports)
|
|
- ✅ Git Sync in Arcane konfiguriert
|
|
- ✅ Commit: `d2fb281` — Complete Dark Mode Implementation
|
|
|
|
### Docker-Container
|
|
|
|
| Container | Port | Status |
|
|
|-----------|------|--------|
|
|
| rippy-api | 8000 | Healthy |
|
|
| rippy-worker | - | Running |
|
|
| rippy-ui | 80 | Running |
|
|
| rippy-postgres | 5432 | Healthy |
|
|
| rippy-redis | 6379 | Healthy |
|
|
|
|
### Features
|
|
|
|
- ✅ **Etappe 3**: SQLite-Cache, TMDB/MusicBrainz/TheTVDB Clients, Pre-Scan, Metadaten-Preview
|
|
- ✅ **Etappe 4**: Jellyfin-Formatierung (NFO-Generator, Image-Downloader)
|
|
- ✅ **Etappe 5**: JWT-Auth (15min/7T), Rate-Limiting (100/min), API-Key-Management
|
|
- ✅ **Etappe 6**: Docker read_only, tmpfs, healthchecks, minimale Images
|
|
- ✅ **Etappe 7**: API UI Modernisiert, Import-Fixes, Doppelte Einträge behoben
|
|
- ✅ **Etappe 8**: Dark Mode mit Theme-Toggle, Separation of Concerns
|
|
- ✅ **Etappe 9**: Complete Dark Mode Implementation (alle UI-Komponenten)
|
|
- ✅ **Dokumentation**: README, KONZEPT.md, ROADMAP.md, SAVEPOINT.md
|
|
|
|
### Nächste Schritte
|
|
|
|
- Job-Verlauf UI (aktuell nur leere Listen)
|
|
- TMDB API Schlüssel in Arcane Environment konfigurieren
|
|
- Proxmox LXC Template
|
|
- Ansible Playbooks
|
|
|
|
### SoC Refactoring — Abgeschlossen (Etappe 9)
|
|
|
|
- ✅ **Theme-Context**: Theme-Logik aus App.tsx ausgelagert
|
|
- ✅ **Dark Mode Utility**: useDarkMode Hook implementiert
|
|
- ✅ **Component-Struktur**: Dark Mode props von inneren Komponenten versteckt
|
|
- ✅ **Config Validation**: TMDB-API-Key ist Pflicht
|
|
- ✅ **Cache Key Centralization**: cache/keys.py erstellt
|
|
- ✅ **CD-Ripping**: abcde-Integration implementiert
|
|
|
|
### Git-Log
|
|
|
|
```
|
|
d2fb281 - fix: complete dark mode implementation with all UI components
|
|
43dfce5 - feat(ui): implement dark mode with theme toggle
|
|
rippy-ui-modern - UI Modernisiert & Import-Fixes
|
|
3d87c8c - Dokumentation aktualisiert
|
|
bdb9f8d - SAVEPOINT v1.5: Sicherheit abgeschlossen
|
|
efa642e - Etappe 6: Sicherheit
|
|
```
|
|
|
|
---
|
|
|
|
## v2.0 — Fix-Runde nach externem Code-Review (22.07.2026, Claude)
|
|
|
|
**Alle Befunde des Reviews behoben, echte Tests eingeführt, Ampel-CI aktiv.**
|
|
|
|
Gefixt:
|
|
- **Metadaten-Preview WIEDERHERGESTELLT**: Beim SoC-Refactoring hatte ein Stub-Paket
|
|
die echte prescan-Implementierung überschattet — die Preview lieferte immer
|
|
„Unknown Disc". Echte Logik liegt jetzt im Paket, tote Altmodule (cache.py,
|
|
prescan.py flach) gelöscht.
|
|
- Fortschrittsmeldung: Celery `update_state` statt Aufrufe eines nie existierenden
|
|
Tasks; `self.send_task` (erfundene API) entfernt.
|
|
- abcde-Kommando korrigiert (`-o` war doppelt → CD-Ripping war nie funktionsfähig);
|
|
Zielverzeichnis jetzt via OUTPUTDIR-Config; Kommando-Bau als testbare Funktion.
|
|
- JWT: fester Schlüssel PFLICHT (kein Zufalls-Fallback pro Prozess mehr);
|
|
Logout blacklistet wirklich; Cleanup löscht nur Abgelaufene (vorher: alles).
|
|
- main.py: crashende Endpoints repariert (fehlende Imports Path/secrets,
|
|
nicht existentes api_keys-Dict → ratelimit-Store), Audio-`year`-Bug,
|
|
Admin-Zugang aus .env statt hartkodiert.
|
|
- Ruff komplett grün (29 Funde), package-lock.json committet.
|
|
- Tests: test_auth, test_cache_keys, test_ripping_helpers (der giftige
|
|
test_health-Placebo ist raus).
|
|
|
|
## ⚠️ OFFENE ENTSCHEIDUNG FÜR DEN COMMANDER (Regel B — keine stille Abweichung)
|
|
|
|
**KONZEPT sagt: MakeMKV, verlustfrei (Muss-Feature). Gebaut wurde: HandBrake mit
|
|
Lossy-Preset „Fast 1080p30".** Deine DVDs/Blu-rays werden aktuell TRANSKODIERT,
|
|
nicht verlustfrei gesichert. Optionen:
|
|
1. Auf MakeMKV umbauen (wie geplant — makemkvcon ist im Prescan schon im Einsatz,
|
|
braucht Beta-Key-Handling im Worker-Container), ODER
|
|
2. Konzept bewusst ändern („lossy reicht mir") und KONZEPT.md anpassen.
|
|
Bis zur Entscheidung bleibt HandBrake aktiv — aber jetzt SICHTBAR statt still.
|