diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart index 0229ef4..de30516 100644 --- a/lib/screens/home_screen.dart +++ b/lib/screens/home_screen.dart @@ -217,12 +217,13 @@ class _MeloHomeState extends State { } } - void _zeigeServerBrowser() { + Future _zeigeServerBrowser() async { if (_vm.navidrome.istVerbunden) { - // Abmelden - _vm.navidrome.setCredentials('', '', ''); + // Trennen: auch gespeicherte Zugangsdaten löschen (SharedPreferences + + // SecureStorage) — sonst ist der Chip nach App-Neustart wieder grün. + await _vm.navidrome.loescheZugangsdaten(); _vm.navidromeAlben.clear(); - setState(() {}); + if (mounted) setState(() {}); return; } // Verbinden: einfacher Login-Dialog diff --git a/lib/services/navidrome_service.dart b/lib/services/navidrome_service.dart index 5c87429..6fc78be 100644 --- a/lib/services/navidrome_service.dart +++ b/lib/services/navidrome_service.dart @@ -111,6 +111,26 @@ class NavidromeService { } } + /// Trennt die Verbindung dauerhaft: In-Memory-Zustand UND persistierte + /// Zugangsdaten (SharedPreferences + SecureStorage) werden gelöscht. + /// Sonst lädt `ladeGespeicherteZugangsdaten()` beim nächsten App-Start + /// die alten Daten wieder und der Musikserver-Chip wäre wieder grün. + Future loescheZugangsdaten() async { + _serverUrl = ''; + _user = ''; + _password = ''; + _salt = ''; + _token = null; + try { + final prefs = await SharedPreferences.getInstance(); + await prefs.remove('navidrome_url'); + await prefs.remove('navidrome_user'); + await _secure.delete(key: 'navidrome_pass'); + } catch (e) { + debugPrint('Fehler beim Löschen der Navidrome-Zugangsdaten: $e'); + } + } + bool get istVerbunden => _serverUrl.isNotEmpty && _user.isNotEmpty; Uri _uri(String endpoint, [Map? extra]) {