Diagnose zeigt den Aufbau der Live-TV-Antwort
Die Sender bleiben leer, und ich habe jetzt zweimal geraten, wo sie stehen könnten — beim ersten Mal ein eigener Endpunkt, beim zweiten die Verschachtelung unter Device. Beides war eine Vermutung, weil dieser Teil der Plex-API keine offizielle Beschreibung hat. Statt ein drittes Mal zu raten: Einstellungen → Diagnose → „Live-TV- Antwort ansehen" fragt den Server und zeigt den Aufbau der Antwort. Schlüssel, Anzahl und Sendernamen, keine Werte und keine Zugangsdaten — genug, um den richtigen Schlüssel zu finden. Von Listen wird nur der erste Eintrag ausgeklappt; bei dreißig Sendern wäre die vollständige Ausgabe unlesbar, und alle haben denselben Aufbau. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+2384
-2352
File diff suppressed because it is too large
Load Diff
@@ -11,6 +11,8 @@ struct DiagnosticsView: View {
|
||||
@Environment(FlixySession.self) private var session
|
||||
@Environment(\.flixyAccent) private var accent
|
||||
@Environment(PlaybackDiagnostics.self) private var diagnostics
|
||||
@State private var liveTVStructure: String?
|
||||
@State private var isInspectingLiveTV = false
|
||||
|
||||
var body: some View {
|
||||
Form {
|
||||
@@ -71,6 +73,36 @@ struct DiagnosticsView: View {
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
Button {
|
||||
Task { await inspectLiveTV() }
|
||||
} label: {
|
||||
if isInspectingLiveTV {
|
||||
ProgressView().controlSize(.small)
|
||||
} else {
|
||||
Label("diagnostics.liveTV", systemImage: "antenna.radiowaves.left.and.right")
|
||||
}
|
||||
}
|
||||
.disabled(isInspectingLiveTV)
|
||||
|
||||
if let liveTVStructure {
|
||||
Text(liveTVStructure)
|
||||
.font(.system(.caption2, design: .monospaced))
|
||||
.foregroundStyle(Color.flixyTextSecondary)
|
||||
.textSelection(.enabled)
|
||||
|
||||
Button {
|
||||
UIPasteboard.general.string = liveTVStructure
|
||||
} label: {
|
||||
Label("diagnostics.copy", systemImage: "doc.on.doc")
|
||||
}
|
||||
}
|
||||
} header: {
|
||||
Text("sidebar.liveTV")
|
||||
} footer: {
|
||||
Text("diagnostics.liveTVHint")
|
||||
}
|
||||
|
||||
Section("settings.app") {
|
||||
LabeledContent("settings.version", value: Branding.version)
|
||||
LabeledContent("settings.build", value: Branding.buildStamp)
|
||||
@@ -89,6 +121,14 @@ struct DiagnosticsView: View {
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
}
|
||||
|
||||
/// Fragt den Server, wie seine Antwort auf `/livetv/dvrs` aufgebaut ist.
|
||||
private func inspectLiveTV() async {
|
||||
guard let server = session.server else { return }
|
||||
isInspectingLiveTV = true
|
||||
defer { isInspectingLiveTV = false }
|
||||
liveTVStructure = await server.liveTVStructure()
|
||||
}
|
||||
|
||||
/// Der Bericht als Text zum Weitergeben.
|
||||
///
|
||||
/// Enthält bewusst keinen Token: die Quelladresse ist schon ohne
|
||||
|
||||
Reference in New Issue
Block a user