v2.55 — Echtzeit-Cloud-Sync (SSE) mit 3 Modi: Echtzeit/Manuell/Zeit

This commit is contained in:
Dustin
2026-08-06 18:01:02 +02:00
parent 2ce24398e4
commit 3f169fa1d9
4 changed files with 935 additions and 19 deletions
+24 -1
View File
@@ -21,6 +21,7 @@ import '../services/cloud_service.dart';
import '../services/player_service.dart';
import '../services/auth_service.dart';
import '../services/sync_service.dart';
import '../services/realtime_sync_service.dart';
import '../config/app_config.dart';
class MeloHome extends StatefulWidget {
@@ -30,7 +31,8 @@ class MeloHome extends StatefulWidget {
State<MeloHome> createState() => _MeloHomeState();
}
class _MeloHomeState extends State<MeloHome> {
class _MeloHomeState extends State<MeloHome> with WidgetsBindingObserver {
final RealtimeSyncService _realtimeSync = RealtimeSyncService();
final MeloHomeViewModel _vm = MeloHomeViewModel();
final CloudService _cloud = CloudService();
@@ -48,6 +50,7 @@ class _MeloHomeState extends State<MeloHome> {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
_vm.ladeSongs();
// Gespeicherte Navidrome-Zugangsdaten laden → Musikserver-Statuspunkt
_vm.navidrome.ladeGespeicherteZugangsdaten().then((_) {
@@ -55,17 +58,37 @@ class _MeloHomeState extends State<MeloHome> {
});
// Cloud-Verbindung beim App-Start herstellen (feuern-und-vergessen).
_cloud.verbinde();
// Realtime-Sync starten (SSE-Push, wenn Modus=Echtzeit)
_realtimeSync.starteWennAktiviert();
// Tipp auf die Sync-Abschluss-/Fehler-Notification → Cloud-Tab öffnen
SyncService.syncBenachrichtigungGetippt.addListener(_syncNotifGetippt);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
SyncService.syncBenachrichtigungGetippt.removeListener(_syncNotifGetippt);
_realtimeSync.stoppe();
_vm.dispose();
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
switch (state) {
case AppLifecycleState.resumed:
// App in den Vordergrund → Realtime fortsetzen
_realtimeSync.fortsetzen();
case AppLifecycleState.paused:
case AppLifecycleState.detached:
case AppLifecycleState.inactive:
case AppLifecycleState.hidden:
// App im Hintergrund → Realtime pausieren (Batterie sparen)
_realtimeSync.pausiere();
}
}
/// Öffnet den Cloud-Tab, wenn die Sync-Notification getippt wurde.
void _syncNotifGetippt() {
if (!mounted) return;