Live-TV: die Lineup-Kennung ist eine Adresse, keine Kennung
Der zweite Abzug zeigt den Pfad, der 404 ergab:
/tv.plex.providers.epg.cloud:2/lineups/
lineup://tv.plex.providers.epg.cloud/6228f7f2364e02fa5ec8e51c
#Swisscom%20Blue%20TV%20%28Deutschschweiz%29%20%28521%20channels%29
/channels
`Lineup.id` heißt zwar Kennung, ist aber eine vollständige Adresse: mit
Schema, Doppelschrägstrich, Prozentzeichen und einem Anhang hinter der
Raute. Die habe ich roh in den Pfad gespleißt.
Gebraucht wird der nackte Teil in der Mitte —
`6228f7f2364e02fa5ec8e51c`. `PlexLineup.pathIdentifier` packt ihn aus,
vier Tests halten die Fälle fest.
Da die Pfadform zwischen Serverfassungen schwankt und dieser Teil der
API keine Beschreibung hat, werden drei Adressen der Reihe nach
probiert. Welche gegriffen hat, steht in der Diagnose — damit aus dem
Durchprobieren beim nächsten Mal Wissen wird. Der Strukturabzug deckt
jetzt alle drei ab.
173 Tests.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -153,3 +153,76 @@ struct ChannelMatchingTests {
|
||||
#expect(!channel.matches(anyOf: ["srf1", "srf2"]))
|
||||
}
|
||||
}
|
||||
|
||||
@Suite("Kennung der Senderliste")
|
||||
struct LineupIdentifierTests {
|
||||
|
||||
@Test("Aus der vollen Adresse wird der nackte Teil")
|
||||
func extractsBareIdentifier() {
|
||||
// Genau der Wert von einem echten Server. Roh in den Pfad gesetzt
|
||||
// ergab er 404: Schema, Doppelschrägstrich, Prozentzeichen und ein
|
||||
// Anhang hinter der Raute.
|
||||
let lineup = PlexLineup(
|
||||
id: "lineup://tv.plex.providers.epg.cloud/6228f7f2364e02fa5ec8e51c#Swisscom%20Blue%20TV%20%28521%20channels%29"
|
||||
)
|
||||
#expect(lineup.pathIdentifier == "6228f7f2364e02fa5ec8e51c")
|
||||
}
|
||||
|
||||
@Test("Eine Adresse ohne Anhang funktioniert auch")
|
||||
func withoutFragment() {
|
||||
let lineup = PlexLineup(id: "lineup://tv.plex.providers.epg.cloud/abc123")
|
||||
#expect(lineup.pathIdentifier == "abc123")
|
||||
}
|
||||
|
||||
@Test("Eine bereits nackte Kennung bleibt unverändert")
|
||||
func alreadyBare() {
|
||||
// Nicht jeder Anbieter liefert eine Adresse — manche geben die
|
||||
// Kennung direkt.
|
||||
#expect(PlexLineup(id: "abc123").pathIdentifier == "abc123")
|
||||
}
|
||||
|
||||
@Test("Ein leerer Anhang stört nicht")
|
||||
func emptyFragment() {
|
||||
#expect(PlexLineup(id: "lineup://host/abc123#").pathIdentifier == "abc123")
|
||||
}
|
||||
}
|
||||
|
||||
@Suite("Adressen der Senderliste")
|
||||
struct ChannelPathTests {
|
||||
private let dvr = PlexDVR(
|
||||
key: "1",
|
||||
lineups: [PlexLineup(
|
||||
id: "lineup://tv.plex.providers.epg.cloud/6228f7f2364e02fa5ec8e51c#Swisscom%20Blue%20TV"
|
||||
)]
|
||||
)
|
||||
|
||||
@Test("Die Kennung der Senderliste wird ausgepackt, nicht roh eingesetzt")
|
||||
func usesBareIdentifier() {
|
||||
// Der Fehler, der 404 ergab: die volle Adresse mit Schema, Anhang und
|
||||
// Prozentzeichen landete unverändert im Pfad.
|
||||
let paths = PlexServer.channelPaths(dvr: dvr, epgIdentifier: "epg:2")
|
||||
let first = paths[0]
|
||||
|
||||
#expect(first == "/epg:2/lineups/6228f7f2364e02fa5ec8e51c/channels")
|
||||
#expect(!first.contains("lineup://"))
|
||||
#expect(!first.contains("#"))
|
||||
#expect(!first.contains("%"))
|
||||
}
|
||||
|
||||
@Test("Es gibt Rückfalllinien")
|
||||
func offersFallbacks() {
|
||||
// Die Form unterscheidet sich zwischen Serverfassungen, und dieser
|
||||
// Teil der API hat keine Beschreibung.
|
||||
let paths = PlexServer.channelPaths(dvr: dvr, epgIdentifier: "epg:2")
|
||||
#expect(paths.count >= 2)
|
||||
#expect(paths.contains("/livetv/dvrs/1/channels"))
|
||||
}
|
||||
|
||||
@Test("Ohne Senderliste bleiben die übrigen Wege")
|
||||
func withoutLineup() {
|
||||
let bare = PlexDVR(key: "7")
|
||||
let paths = PlexServer.channelPaths(dvr: bare, epgIdentifier: "epg:2")
|
||||
#expect(!paths.isEmpty)
|
||||
#expect(paths.allSatisfy { !$0.contains("lineups//") })
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user