Probe: den Server nach seinen eigenen Fähigkeiten fragen
Der Befund wird deutlicher: ping und stop antworten mit 404, start.m3u8 und decision mit 400. Die einen Routen gibt es nicht, die anderen lehnen ab. Und die Mediathek antwortet normal — an der Verbindung liegt es nicht. In jeder Antwort der Wurzel stehen Felder, deren Werte ich nie angesehen habe: transcoderVideo, transcoderActiveVideoSessions, transcoderVideoBitrates. Steht dort `transcoderVideo: false`, kann dieser Server kein Video umrechnen — und dann suche ich seit Tagen nach einer Fähigkeit, die es auf diesem Gerät nicht gibt. Das ist dieselbe Art Annahme wie „der Transcoder tut es schon": etwas Vorausgesetztes, das nie jemand nachgesehen hat. Nachsehen kostet eine Zeile. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2a19db2757
commit
ab3e1c975e
@@ -1569,11 +1569,33 @@ extension PlexServer {
|
|||||||
|
|
||||||
// Und zur Gegenkontrolle etwas, von dem wir wissen, dass es geht:
|
// Und zur Gegenkontrolle etwas, von dem wir wissen, dass es geht:
|
||||||
// die Bilder kommen über denselben `/:/`-Aufbau.
|
// die Bilder kommen über denselben `/:/`-Aufbau.
|
||||||
lines.append(" Bild-Transcoder: \(await rawResponse(forPath: "/photo/:/transcode", limit: 120))")
|
lines.append(" Mediathek: \(await rawResponse(forPath: "/library/sections", limit: 90))")
|
||||||
lines.append(" Mediathek: \(await rawResponse(forPath: "/library/sections", limit: 120))")
|
lines.append(" Server sagt über sich: \(await capabilities())")
|
||||||
return lines
|
return lines
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Was der Server über seine eigenen Fähigkeiten sagt.
|
||||||
|
///
|
||||||
|
/// Die Felder stehen in jeder Antwort der Wurzel, und ihre Werte habe ich
|
||||||
|
/// nie angesehen. Steht dort `transcoderVideo: false`, kann dieser Server
|
||||||
|
/// kein Video umrechnen — und dann war die ganze Suche der letzten Tage
|
||||||
|
/// die Suche nach einer Fähigkeit, die es nicht gibt.
|
||||||
|
public func capabilities() async -> String {
|
||||||
|
guard let data = try? await client.send(PlexRequest(path: "/", timeout: .seconds(15))),
|
||||||
|
let root = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
|
||||||
|
let container = root["MediaContainer"] as? [String: Any]
|
||||||
|
else { return "keine Antwort" }
|
||||||
|
|
||||||
|
let interesting = [
|
||||||
|
"transcoderVideo", "transcoderAudio", "transcoderSubtitles",
|
||||||
|
"transcoderActiveVideoSessions", "transcoderVideoBitrates",
|
||||||
|
"offlineTranscode", "allowSync", "version", "platform",
|
||||||
|
]
|
||||||
|
return interesting
|
||||||
|
.compactMap { key in container[key].map { "\(key)=\($0)" } }
|
||||||
|
.joined(separator: ", ")
|
||||||
|
}
|
||||||
|
|
||||||
private func probe(items: [URLQueryItem], endpoint: String) async -> String {
|
private func probe(items: [URLQueryItem], endpoint: String) async -> String {
|
||||||
guard let baseURL = connection.url,
|
guard let baseURL = connection.url,
|
||||||
var components = URLComponents(
|
var components = URLComponents(
|
||||||
|
|||||||
Reference in New Issue
Block a user