Der Server sagt jetzt selbst, ob er uns für lokal hält

Die Probe endete bisher mit einem Konjunktiv: „Kam dieser Aufruf von
zuhause, ist Punkt 1 die Erklärung." Das ist eine Vermutung an genau der
Stelle, an der die ganze Messung hängt.

`GET /System/Endpoint` beantwortet `IsInNetwork` mit **demselben**
Aufruf, mit dem auch die ABR-Sperre entscheidet:
`_networkManager.IsInLocalNetwork(HttpContext.GetNormalizedRemoteIP())`.
Damit steht als Erstes im Bericht, ob eine Leiter überhaupt möglich
wäre — und ob das Folgende eine Aussage über unterwegs enthält oder
keine.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-27 15:43:55 +02:00
co-authored by Claude Opus 5
parent 52d6ebba43
commit d878289929
@@ -16,6 +16,19 @@ import MediaKit
// im Schlüsselbund; gedruckt werden Stufen und Zahlen, nie eine vollständige
// Adresse.
/// Wie der Server die Herkunft dieser Anfrage einordnet.
///
/// `isInNetwork` ist genau die Größe, an der Jellyfins ABR-Sperre hängt.
struct Endpunktlage: Decodable {
let isLocal: Bool
let isInNetwork: Bool
private enum CodingKeys: String, CodingKey {
case isLocal = "IsLocal"
case isInNetwork = "IsInNetwork"
}
}
/// Was in einer Playlist steht.
struct Leiter {
var stufen: [(bandbreite: Int, auflösung: String?)] = []
@@ -149,6 +162,30 @@ func jellyfinLeiter(host: String) async {
let backend = JellyfinBackend(client: client, account: konto, serverName: "Probe")
// **Die Frage, die alles andere erklärt, direkt an den Server.**
//
// `/System/Endpoint` beantwortet `IsInNetwork` mit demselben Aufruf,
// mit dem auch die ABR-Sperre entscheidet:
// `_networkManager.IsInLocalNetwork(HttpContext.GetNormalizedRemoteIP())`.
// Damit muss niemand mehr raten, ob „von zuhause" der Grund ist.
let lage = try? await client.send(
JellyfinRequest(path: "/System/Endpoint"),
as: Endpunktlage.self
)
if let lage {
if lage.isInNetwork {
print("Der Server hält diese Verbindung für LOKAL.")
print(" → Eine Leiter wird er hier grundsätzlich nicht liefern,")
print(" ganz gleich was wir anfragen. Das Folgende sagt damit")
print(" nichts darüber, was von unterwegs käme.")
} else {
print("Der Server hält diese Verbindung für AUSSERHALB.")
print(" → Hier ist eine Leiter möglich. Kommt trotzdem nur eine")
print(" Stufe, liegt es an etwas anderem.")
}
print("")
}
// Irgendeinen Film. Es geht um die Form der Antwort, nicht um den Inhalt.
guard let mediathek = (try? await backend.libraries())?.first(where: { $0.kind == .movie }),
let kachel = try? await backend.items(