v2.55 — Echtzeit-Cloud-Sync (SSE) mit 3 Modi: Echtzeit/Manuell/Zeit
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user