Probe: den Entscheider fragen, wenn der Transcoder schweigt
Der Transcoder antwortet auf jede Form der Adresse mit einer nackten „400 Bad Request"-Seite — ohne Plex-Meldung, ohne Hinweis. Der Entscheider bekommt dieselben Angaben und gibt eine Plex-Antwort zurück. Das ist die letzte Stelle, an der dieser Server noch erklärt, woran es liegt. Schlägt das Einschalten fehl, zeigt der Probe deshalb jetzt zusätzlich die Antwort des Entscheiders — in beiden Kodierformen — sowie den Empfänger, das Gerät und /livetv/sessions im Wortlaut. Dazu kann der Probe beliebige Adressen abfragen: `swift run FlixyProbe /livetv/dvrs/2`. Eine Schnittstelle ohne Beschreibung erkundet man, indem man sie fragt. Der Token wird aus jeder Ausgabe entfernt, falls der Server ihn zurückspiegelt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
03a8d1f899
commit
7987dbf9a4
@@ -61,6 +61,21 @@ else { fatalError("Kein Weg zu \(resource.name) erreichbar.") }
|
||||
|
||||
print("Server: \(resource.name) über \(connection.local ? "lokal" : "entfernt")\n")
|
||||
|
||||
// MARK: - Freie Abfrage
|
||||
|
||||
// `swift run FlixyProbe /pfad /noch-ein-pfad …` fragt genau diese Adressen ab
|
||||
// und zeigt die Antwort. Dafür ist das Werkzeug da: eine Schnittstelle ohne
|
||||
// Beschreibung erkundet man, indem man sie fragt, nicht indem man rät.
|
||||
let requested = CommandLine.arguments.dropFirst().filter { !$0.hasPrefix("--") }
|
||||
if !requested.isEmpty {
|
||||
for path in requested {
|
||||
print("=== \(path) ===")
|
||||
print(await server.rawResponse(forPath: path))
|
||||
print()
|
||||
}
|
||||
exit(0)
|
||||
}
|
||||
|
||||
// MARK: - Live-TV
|
||||
|
||||
let availability = await server.liveTVAvailability()
|
||||
@@ -93,6 +108,20 @@ for probe in result.trace {
|
||||
|
||||
print("\n" + (result.url == nil ? "Kein Weg trug." : "Erfolg."))
|
||||
|
||||
if result.url == nil {
|
||||
// Der Transcoder antwortet mit einer nackten 400-Seite. Der Entscheider
|
||||
// bekommt dieselben Angaben und erklärt sich — die letzte Stelle, an der
|
||||
// dieser Server noch sagt, woran es liegt.
|
||||
print("\n=== Was der Entscheider dazu sagt ===")
|
||||
print(await server.decisionDump(channel: channel, program: program))
|
||||
|
||||
print("\n=== Empfänger und Gerät ===")
|
||||
for path in ["/livetv/dvrs/\(dvr.key)", "/media/grabbers/devices/1", "/livetv/sessions"] {
|
||||
print("--- \(path) ---")
|
||||
print(await server.rawResponse(forPath: path, limit: 700))
|
||||
}
|
||||
}
|
||||
|
||||
/// Eine Kennung, die über Läufe hinweg gleich bleibt.
|
||||
///
|
||||
/// Wechselt sie, gilt die Probe am Konto als neues Gerät, und in der
|
||||
|
||||
Reference in New Issue
Block a user