Live-TV: der Empfänger spricht eine andere Sprache als der Programmführer
Aus der Antwort von /media/grabbers/devices/1:
{"channelKey":"6228f7f2364e02fa5ec8e51c-5fc706063f45c6002eab58a3",
"deviceIdentifier":"300",
"lineupIdentifier":"002"}
Der Programmführer kennt den Sender als `6228f7f2…-5fc706…`, der Tuner
als `300`. Die Zuordnung im Empfänger übersetzt zwischen beidem — und
genau diese Übersetzung habe ich nie benutzt. Jede Anfrage an den
Empfänger ging in der Sprache des Programmführers hinaus, und darauf gibt
es nur eine Antwort: 404.
Die Nummer am Empfänger steht jetzt an erster Stelle im Suchraum und im
Bericht. Der Empfänger ist ein HDHomeRun FLEX QUATRO mit vier Tunern; er
kennt Sender ausschließlich unter dieser Nummer.
Nebenbei aus derselben Ausgabe: /livetv/sessions antwortet mit size 0.
Die Route gibt es also — sie ist eine Liste. /livetv/sessions/<uuid> gibt
es nur, wenn die Sitzung vorher angelegt wurde, und deshalb war jeder
Abruf dort ein 404 ohne Aussagekraft.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
7987dbf9a4
commit
08e6e14534
@@ -36,6 +36,20 @@ public struct PlexDVR: Sendable, Equatable, Decodable, Identifiable {
|
||||
Set(devices.flatMap(\.channelMappings).filter(\.isEnabled).map(\.channelKey))
|
||||
}
|
||||
|
||||
/// Die Sendernummer am Empfänger für eine Kennung des Programmführers.
|
||||
///
|
||||
/// Nachsichtig verglichen, weil die Kennung je nach Quelle mit oder ohne
|
||||
/// Vorsatz der Senderliste kommt.
|
||||
public func deviceChannel(forChannelKey key: String) -> String? {
|
||||
let tail = key.split(separator: "-").last.map(String.init)
|
||||
for mapping in devices.flatMap(\.channelMappings) {
|
||||
guard let identifier = mapping.deviceIdentifier else { continue }
|
||||
if mapping.channelKey == key { return identifier }
|
||||
if let tail, mapping.channelKey.hasSuffix(tail) { return identifier }
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case key, uuid, language, lineupTitle, lineup, epgIdentifier
|
||||
case devices = "Device"
|
||||
@@ -115,7 +129,15 @@ public struct PlexLineup: Sendable, Equatable, Decodable, Identifiable {
|
||||
/// Sagt, welcher Sender der Senderliste am Empfänger eingeschaltet ist —
|
||||
/// mehr nicht. Namen, Nummern und Logos stehen beim Programmanbieter.
|
||||
public struct PlexChannelMapping: Sendable, Equatable, Decodable {
|
||||
/// Die Kennung des Senders beim Programmführer.
|
||||
public let channelKey: String
|
||||
/// Die Sendernummer **am Empfänger** — etwa `"300"`.
|
||||
///
|
||||
/// Der Stein von Rosetta dieser Schnittstelle: der Programmführer kennt
|
||||
/// den Sender als `6228f7f2…-5fc706…`, der Tuner als `300`. Ohne diese
|
||||
/// Übersetzung redet man mit dem Empfänger in einer Sprache, die er nicht
|
||||
/// spricht — und bekommt auf jede Anfrage 404.
|
||||
public let deviceIdentifier: String?
|
||||
public let lineupIdentifier: String?
|
||||
private let enabled: String?
|
||||
|
||||
@@ -123,8 +145,14 @@ public struct PlexChannelMapping: Sendable, Equatable, Decodable {
|
||||
/// Wahrheitswert.
|
||||
public var isEnabled: Bool { enabled != "0" }
|
||||
|
||||
public init(channelKey: String, lineupIdentifier: String? = nil, enabled: String? = "1") {
|
||||
public init(
|
||||
channelKey: String,
|
||||
deviceIdentifier: String? = nil,
|
||||
lineupIdentifier: String? = nil,
|
||||
enabled: String? = "1"
|
||||
) {
|
||||
self.channelKey = channelKey
|
||||
self.deviceIdentifier = deviceIdentifier
|
||||
self.lineupIdentifier = lineupIdentifier
|
||||
self.enabled = enabled
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user