From 008f6b7fd70e8089144fca5a5d9b1aed2eeb73b8 Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Sat, 12 Sep 2026 16:04:12 +0200 Subject: [PATCH] =?UTF-8?q?Probe:=20die=20Gegenprobe=20war=20wom=C3=B6glic?= =?UTF-8?q?h=20selbst=20falsch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Server sagt transcoderVideo=1 — er kann umrechnen. Damit ist auch diese Ausrede weg, und es liegt an meiner Anfrage. Zwei Stellen, an denen ich es mir zu leicht gemacht habe. Der Titel für die Gegenprobe kam aus den Startseiten-Reihen, und dort stehen auch Einträge von plex.tv, deren Kennung kein Schlüssel dieses Servers ist. Mit so einem Eintrag prüft die Gegenprobe gar nichts — sie kommt jetzt aus einer echten Mediathek, und vorher wird nachgesehen, ob der Eintrag überhaupt existiert. Und die Antwort der Live-Sitzung war bei 700 Zeichen abgeschnitten, ausgerechnet dort, wo `Part` anfängt — an der einzigen Stelle, die zählt. Co-Authored-By: Claude Opus 5 --- Packages/FlixyKit/Sources/FlixyProbe/main.swift | 13 +++++++++++-- .../PlexKit/Endpoints/PlexServer+LiveTV.swift | 11 +++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Packages/FlixyKit/Sources/FlixyProbe/main.swift b/Packages/FlixyKit/Sources/FlixyProbe/main.swift index c60b760..1af5119 100644 --- a/Packages/FlixyKit/Sources/FlixyProbe/main.swift +++ b/Packages/FlixyKit/Sources/FlixyProbe/main.swift @@ -88,8 +88,17 @@ if !requested.isEmpty { // mitgeschleppt habe, und sie gehört als Erstes geprüft: läuft eine // gewöhnliche Datei durch, liegt es an Live-TV. Läuft sie nicht durch, habe // ich tagelang am falschen Ende gesucht. -if let hubs = try? await server.homeHubs(), - let movie = hubs.flatMap(\.items).first(where: { $0.kind == .movie }) { +// Aus einer echten Mediathek, nicht aus den Startseiten-Reihen: dort stehen +// auch Einträge von plex.tv, deren Kennung kein Schlüssel dieses Servers ist. +// Mit so einem Eintrag prüft die Gegenprobe nichts. +let libraries = (try? await server.libraries()) ?? [] +let movieLibrary = libraries.first { $0.kind == .movie } ?? libraries.first +let firstMovie = await { () async -> PlexItem? in + guard let movieLibrary else { return nil } + return try? await server.items(inLibrary: movieLibrary, limit: 1).items.first +}() + +if let movie = firstMovie { let request = TranscodeRequest( ratingKey: movie.ratingKey, maximumBitrate: 4_000, diff --git a/Packages/FlixyKit/Sources/PlexKit/Endpoints/PlexServer+LiveTV.swift b/Packages/FlixyKit/Sources/PlexKit/Endpoints/PlexServer+LiveTV.swift index 7152490..19a7511 100644 --- a/Packages/FlixyKit/Sources/PlexKit/Endpoints/PlexServer+LiveTV.swift +++ b/Packages/FlixyKit/Sources/PlexKit/Endpoints/PlexServer+LiveTV.swift @@ -717,9 +717,11 @@ extension PlexServer { // Und wie die Sitzung danach aussieht — dorthin zeigt der Pfad, den // der Transcoder bekommt. if let sessionKey = Self.firstSessionKey(in: data) { + // Großzügig: bisher war genau dort abgeschnitten, wo `Part` + // anfängt — also an der einzigen Stelle, die zählt. probes.append(ChannelProbe( path: sessionKey, - result: await rawResponse(forPath: sessionKey, limit: 700) + result: await rawResponse(forPath: sessionKey, limit: 2_500) )) } @@ -1504,6 +1506,12 @@ extension PlexServer { public func transcoderBisect(ratingKey: String) async -> [String] { let session = UUID().uuidString let path = "/library/metadata/\(ratingKey)" + + // Erst prüfen, ob es diesen Eintrag überhaupt gibt. Der Titel für die + // Gegenprobe kam aus den Startseiten-Reihen, und dort stehen auch + // Einträge von plex.tv, deren Kennung kein Mediathek-Schlüssel ist. + // Dann wäre die ganze Gegenprobe wertlos gewesen. + var lines = [" Eintrag \(ratingKey): \(await rawResponse(forPath: path, limit: 150))"] let encoded = path.addingPercentEncoding(withAllowedCharacters: .plexParameterAllowed) ?? path let variants: [(String, [URLQueryItem])] = [ @@ -1552,7 +1560,6 @@ extension PlexServer { ]), ] - var lines: [String] = [] for (name, items) in variants { lines.append(" \(name): \(await probe(items: items, endpoint: "start.m3u8"))") }