Auto-Anmeldung: doppelten Login-Request beim App-Start verhindert (Race durch IndexedStack)
Betraf alle drei Nutzer (Dustin, Baka, Tinker), nicht nur einen: IndexedStack baut Download-Tab und YT-Suche beim App-Start gleichzeitig, beide loesen unabhaengig voneinander autoAnmelden() aus. Ohne In-Flight-Absicherung gingen zwei fast-gleichzeitige Login-Requests an denselben Server, von denen einer abgelehnt wurde - obwohl die Zugangsdaten korrekt waren. - BakaAuth.autoAnmelden() haengt einen ueberlappenden Aufruf jetzt an den bereits laufenden Login-Versuch an, statt einen zweiten Request zu senden. - Anmelde-Dialog im Download-Tab zeigt den tatsaechlich bekannten Navidrome-Benutzernamen statt immer "Baka" vorauszufuellen. - Navidrome-Dialog in den Einstellungen waehlt den zuletzt bekannten Benutzer vor statt immer "Baka".
This commit is contained in:
@@ -48,6 +48,12 @@ class BakaAuth extends ChangeNotifier {
|
||||
String? _token;
|
||||
String _benutzer = '';
|
||||
|
||||
/// Laufender Login-Versuch aus [autoAnmelden] — solange er offen ist,
|
||||
/// hängt sich ein überlappender Aufruf daran statt einen zweiten
|
||||
/// Request loszuschicken (Race Condition: mehrere Tabs im IndexedStack
|
||||
/// lösen beim App-Start gleichzeitig autoAnmelden aus).
|
||||
Future<void>? _laufenderAutoLogin;
|
||||
|
||||
bool get istAngemeldet => _token != null && _token!.isNotEmpty;
|
||||
String get benutzer => _benutzer;
|
||||
|
||||
@@ -108,7 +114,9 @@ class BakaAuth extends ChangeNotifier {
|
||||
/// authentifizierten Aufruf ohnehin automatisch.
|
||||
Future<void> autoAnmelden(String benutzer, String passwort) async {
|
||||
if (istAngemeldet || benutzer.isEmpty || passwort.isEmpty) return;
|
||||
await anmelden(benutzer, passwort);
|
||||
_laufenderAutoLogin ??= anmelden(benutzer, passwort)
|
||||
.whenComplete(() => _laufenderAutoLogin = null);
|
||||
await _laufenderAutoLogin;
|
||||
}
|
||||
|
||||
Future<void> abmelden() async {
|
||||
|
||||
Reference in New Issue
Block a user