From a24875726f5577dac7616161c7ef33809e5673ef Mon Sep 17 00:00:00 2001 From: Dustin Date: Wed, 5 Aug 2026 08:10:30 +0200 Subject: [PATCH] =?UTF-8?q?v2.51.4=20=E2=80=94=20Review-Fix=20MED-2:=20?= =?UTF-8?q?=E2=80=9ETrennen=E2=80=9C=20(Musikserver)=20persistiert=20jetzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## MED-2 (navidrome_service.dart + home_screen.dart) - Neues NavidromeService.loescheZugangsdaten(): löscht In-Memory-Zustand UND persistierte Credentials (SharedPreferences navidrome_url/user + SecureStorage navidrome_pass) - _zeigeServerBrowser() ist async und ruft loescheZugangsdaten() beim Trennen auf — Chip bleibt nach App-Neustart rot statt wieder grün --- lib/screens/home_screen.dart | 9 +++++---- lib/services/navidrome_service.dart | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) 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]) {