Die Oberfläche weiß nicht mehr, dass es Plex gibt

Keine Datei unter Views/LiveTV importiert noch PlexKit. Sender, Programm
und Einschalten laufen über den neutralen Vertrag, und supportsLiveTV
fragt endlich die Fähigkeit ab statt "server != nil" — womit die Zusage
in JellyfinBackend.capabilities zum ersten Mal stimmt.

Der Player holt die laufende Sendung jetzt für genau einen Sender nach.
Vorher ging dafür das Raster über alle Sender hinaus, weil der Plex-Weg
keinen schmaleren kannte; im neutralen Vertrag ist die Senderliste ein
Parameter.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-14 06:20:30 +02:00
co-authored by Claude Opus 5
parent 24765a5afc
commit eebe9280cb
8 changed files with 3930 additions and 3897 deletions
@@ -1,6 +1,6 @@
import SwiftUI
import FlixyDesign
import PlexKit
import MediaKit
/// Welche Sender überhaupt angezeigt werden.
///
@@ -9,7 +9,7 @@ import PlexKit
/// Jeden davon zu zeichnen und sein Programm zu holen kostet Zeit und macht
/// die Ansicht unübersichtlich.
struct ChannelSelectionSheet: View {
let channels: [PlexChannel]
let channels: [LiveChannel]
@Binding var selection: Set<String>
@Environment(FlixySession.self) private var session
@@ -44,7 +44,7 @@ struct ChannelSelectionSheet: View {
}
}
private func row(for channel: PlexChannel) -> some View {
private func row(for channel: LiveChannel) -> some View {
Button {
// Beim ersten Antippen aus „alle" eine echte Auswahl machen:
// sonst hakt man einen Sender an und alle anderen bleiben
@@ -59,14 +59,14 @@ struct ChannelSelectionSheet: View {
} label: {
HStack(spacing: FlixySpacing.regular) {
FlixyArtwork(
url: session.server?.artworkURL(path: channel.thumb, width: 200, height: 120),
url: session.backend?.artworkURL(path: channel.artworkPath, width: 200, height: 120),
aspectRatio: FlixyAspectRatio.channelLogo,
fallbackSymbol: "tv",
contentMode: .fit
)
.frame(width: 48, height: 29)
if let number = channel.channelIdentifier {
if let number = channel.number {
Text(number)
.font(.system(.caption, design: .monospaced))
.foregroundStyle(Color.flixyTextMuted)
@@ -86,7 +86,7 @@ struct ChannelSelectionSheet: View {
.buttonStyle(.plain)
}
private func isShown(_ channel: PlexChannel) -> Bool {
private func isShown(_ channel: LiveChannel) -> Bool {
ChannelSelection.shows(channel, selection: selection)
}
}
@@ -98,11 +98,11 @@ struct ChannelSelectionSheet: View {
/// „alle": so sieht man beim ersten Öffnen sein Programm, ohne vorher etwas
/// angehakt zu haben.
enum ChannelSelection {
static func shows(_ channel: PlexChannel, selection: Set<String>) -> Bool {
static func shows(_ channel: LiveChannel, selection: Set<String>) -> Bool {
selection.isEmpty || selection.contains(channel.id)
}
static func apply(_ selection: Set<String>, to channels: [PlexChannel]) -> [PlexChannel] {
static func apply(_ selection: Set<String>, to channels: [LiveChannel]) -> [LiveChannel] {
guard !selection.isEmpty else { return channels }
let kept = channels.filter { selection.contains($0.id) }
// Wählt jemand Sender ab, die es nicht mehr gibt, bliebe sonst eine