YtSearchService: Gast-Zugang neben Baka-Auth unterstützen

Analog zu YtDownloadService: optionaler gast-Parameter, X-Guest-
Token statt Authorization, automatisches Token-Nachholen bei 401.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Hermes (Server)
2026-08-26 20:56:58 +02:00
co-authored by Claude Sonnet 5
parent 1ff03c96ed
commit 9e2294a480
2 changed files with 67 additions and 4 deletions
+10 -4
View File
@@ -5,6 +5,7 @@ import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
import 'baka_auth.dart';
import 'gast_zugang.dart';
import 'yt_download_service.dart';
/// Ein Treffer der YouTube-Suche über den Baka-Proxy.
@@ -44,12 +45,13 @@ String? youtubeVideoId(String url) {
/// Durchsucht YouTube über den Baka-Proxy (`/api/search`, yt-dlp-gestützt) —
/// dieselbe Anmeldung wie [YtDownloadService].
class YtSearchService extends ChangeNotifier {
YtSearchService({required this.auth, http.Client? client})
YtSearchService({required this.auth, this.gast, http.Client? client})
: _client = client ?? http.Client();
static const proxyUrl = YtDownloadService.proxyUrl;
final BakaAuth auth;
final GastZugang? gast;
final http.Client _client;
bool _laeuft = false;
@@ -64,7 +66,8 @@ class YtSearchService extends ChangeNotifier {
final q = query.trim();
if (q.isEmpty) return;
if (!auth.istAngemeldet) {
final gastAktiv = !auth.istAngemeldet && (gast?.hatToken ?? false);
if (!auth.istAngemeldet && !gastAktiv) {
_treffer = const [];
_fehler = 'Bitte zuerst beim Baka-Konto anmelden';
notifyListeners();
@@ -80,7 +83,7 @@ class YtSearchService extends ChangeNotifier {
final http.Response antwort;
try {
antwort = await _client
.get(uri, headers: auth.authHeader)
.get(uri, headers: gastAktiv ? gast!.gastHeader : auth.authHeader)
.timeout(const Duration(seconds: 20));
} on TimeoutException {
_scheitere('Die Suche braucht zu lange — bitte später erneut versuchen');
@@ -92,7 +95,10 @@ class YtSearchService extends ChangeNotifier {
}
if (antwort.statusCode == 401) {
_scheitere('Anmeldung abgelaufen — bitte neu anmelden');
if (gastAktiv) unawaited(gast!.holeToken());
_scheitere(gastAktiv
? 'Gast-Zugang abgelaufen — bitte erneut versuchen'
: 'Anmeldung abgelaufen — bitte neu anmelden');
return;
}
if (antwort.statusCode != 200) {