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:
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(
|
||||
|
||||
Reference in New Issue
Block a user