2.0 KiB
2.0 KiB
Melo Cloud Sync – Phasen-Plan
Stand: 26.07.2026 Server: Aingrad (Netcup RS 1000) Technik: Python/Flask + SQLite + Symlinks
🔴 Phase 1: Registry-Server
/var/lib/melo-cloud/
├── registry/ ← Alle Songs (nur 1x physisch)
│ └── abc123.mp3
├── users/
│ ├── baka/ ← Symlinks auf registry/
│ └── melo/ ← Symlinks auf registry/
└── covers/ ← Original-Cover von YouTube
- Flask API (Port 8993)
- SQLite DB mit
registry+user_songsTabellen - Auth per Navidrome-Credentials
- Upload-API: SHA256-Check → fpcalc-Fingerprint → speichern in Registry → Hardlink
- Deduplizierung: SHA256 + Fingerprint + Titel-Similarität (>90%)
- Custom-Titel/Cover pro User
- Systemd-Service
melo-cloud.service
🟡 Phase 2: Sync-API
POST /api/cloud/upload– MP3 hochladen + Registry-CheckGET /api/cloud/download– Song vom Server runterladenGET /api/cloud/list– Alle eigenen Songs + StatusDELETE /api/cloud/delete– Link in User-Cloud löschenGET /api/cloud/status– Übersicht (Count, letzter Sync)
🟢 Phase 3: CloudScreen (Flutter)
- Neuer Tab "Cloud" mit Bottom-Nav
- Upload: Lokale MP3s → Server mit Fortschritt
- Download: Server-Songs → Lokal (Batch)
- Sync-Logik:
checkLocalVsServer()→ Diff anzeigen - Sync-Intervall: Manuell / 3h / 6h / 12h
🔵 Phase 4: Playlist-Teilen
- Share-Button → 6-stelliger Code generieren
- Code eingeben → Playlist importieren
- "Nur passende Songs" / "Alle inkl. fehlende" Auswahl
- Matching: Per
registry.orig_title→ Levenshtein-Abgleich
🟣 Phase 5: Geräteübergreifender Sync
- Push-Benachrichtigung bei neuen Songs
- Auto-Sync nach Intervall
- Lösch-Sync über Geräte
- Konflikte: Server = Source of Truth
- Sync-Protokoll (letzte 50 Aktionen)