fix: Gast-Zugang-Sperre, veralteter Token, Doppel-Tap, Hinweistext (Branch-Review)

Behebt die Findings aus dem abschließenden Gesamt-Branch-Review für
feature/youtube-gast-zugang, alle in einem Rutsch:

- KRITISCH: Gast-Modus war eine Einbahnstraße — einmal "Als Gast
  fortfahren" getippt, war _AnmeldeDialog (einziger Baka-Login-Einstieg,
  auch für Melo-Cloud-Sync) dauerhaft unerreichbar. Neu:
  GastZugang.verwerfen() plus "Anmelden"-Knopf neben der Gast-Statuszeile
  in beiden Screens.
- WICHTIG: zugriffOk prüfte den rohen gast.hatToken statt istGastModus —
  ein alter Gast-Token konnte den Auto-Login-Rückfallweg für Server-User
  verdecken. istGastModus wird jetzt vor zugriffOk berechnet und dort
  verwendet.
- WICHTIG: CHANGELOG ergänzt — der Server-Endpunkt POST /api/guest-token
  fehlt noch (separates Vorhaben).
- Doppel-Tap-Schutz für den Gast-Button in beiden Screens.
- Widersprüchlicher Hinweistext im YT-Suche-Tab (verlangte Baka-Login
  direkt über dem Gast-Button) korrigiert.
- Zwei Gast-Tests in youtube_search_screen_test.dart bekommen jetzt
  echtes gast:-Wiring in YtSearchService/YtDownloadService.
- 2 neue Regressionstests fürs Anmelden-Escape-Hatch.

Getestet: volle Suite grün (602 Tests, 1 skipped, 0 failed),
flutter analyze ohne Befund.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcDiyJdVRqh1TtJk5JiabX
This commit is contained in:
Hermes (Server)
2026-08-26 22:17:03 +02:00
co-authored by Claude Sonnet 5
parent b32f3198f8
commit d20f01adee
6 changed files with 175 additions and 23 deletions
+11
View File
@@ -79,4 +79,15 @@ class GastZugang extends ChangeNotifier {
_verbleibend = n;
notifyListeners();
}
/// Verwirft den Gast-Zugang wieder — nötig, damit ein Gast doch noch zum
/// Baka-Konto wechseln kann. Ohne das wäre `_AnmeldeDialog` (der einzige
/// Einstieg in der App für Baka-Login, auch für den Melo-Cloud-Sync)
/// dauerhaft unerreichbar, sobald einmal ein Gast-Token besteht.
Future<void> verwerfen() async {
_token = null;
_verbleibend = null;
await _speicher.loeschen(_tokenKey);
notifyListeners();
}
}