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"))") }