From f789c40594b6f18cf69f9ee16d5ad8a552bf9f59 Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Sat, 10 Oct 2026 20:35:37 +0200 Subject: [PATCH] Der Vorrat holte unangemeldet, und das stand im Protokoll MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 20:32:40 Umpacken … Vorbereitung 3203 ms 20:32:40 FlaroToken was challenged 20:32:52 Umkodieren … 0 ms 20:32:55 erstes Stück nach 2750 ms Einmal je Wiedergabe eine abgewiesene Anfrage, gefolgt von zwölf Sekunden Stille und einer zweiten Bestellung. Die zwölf Sekunden sind AVPlayer, der auf etwas wartet, das nie kommt. Der Vorrat, der dem Spieler die Schnipsel voraushält, benutzt eine flüchtige URLSession — und die bringt ihren eigenen, leeren Keksspeicher mit. Jede Anfrage von dort ging unangemeldet hinaus. Bei Jellyfin fiel das nie auf, weil der Schlüssel dort in der Adresse steht; Flaro meldet über ein Keks an. Und bisher kam der Vorrat bei Flaro nie zum Zug: er springt nur bei einer Abspielliste an, und die App hat bis gestern eine fertige Datei abgespielt. Dass die zweite Bestellung lief, passt dazu: nach dem Fehlschlag gibt der Vorrat auf, und der Spieler holt unmittelbar vom Server — mit dem Keks, den er selbst hat. Co-Authored-By: Claude Opus 5 --- .../Sources/FlaroPlayback/Prefetch/StreamCache.swift | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Packages/FlaroKit/Sources/FlaroPlayback/Prefetch/StreamCache.swift b/Packages/FlaroKit/Sources/FlaroPlayback/Prefetch/StreamCache.swift index c3cab84..a0a4ebd 100644 --- a/Packages/FlaroKit/Sources/FlaroPlayback/Prefetch/StreamCache.swift +++ b/Packages/FlaroKit/Sources/FlaroPlayback/Prefetch/StreamCache.swift @@ -80,6 +80,17 @@ public actor StreamCache { configuration.urlCache = nil configuration.httpMaximumConnectionsPerHost = 4 configuration.timeoutIntervalForRequest = 30 + + // **Die Anmeldung muss mit.** + // + // Eine flüchtige Sitzung bringt ihren eigenen, leeren Keksspeicher + // mit — jede Anfrage von hier ging also unangemeldet hinaus. Bei + // Jellyfin fiel das nie auf: dort steht der Schlüssel in der Adresse. + // Flaro meldet über ein Keks an, und im Protokoll stand genau das: + // `FlaroToken was challenged`, einmal je Wiedergabe, gefolgt von + // zwölf Sekunden Stille und einer zweiten Bestellung. + configuration.httpCookieStorage = HTTPCookieStorage.shared + configuration.httpShouldSetCookies = true self.session = URLSession(configuration: configuration) self.directory = FileManager.default.temporaryDirectory