import SwiftUI import FlixyDesign import MediaKit /// Alle Mediatheken auf einem Bildschirm. /// /// Auf dem iPad hat die Seitenleiste Platz für jede Mediathek einzeln. Auf dem /// iPhone hat die Leiste unten fünf Plätze — und sobald es mehr Ziele gibt, /// schiebt das System den Rest in ein „Mehr"-Verzeichnis. Das sah nicht nur /// gedrängt aus, es war kaputt: die Einträge dort bekamen **zwei** /// Navigationsleisten übereinander, eine vom System und eine von uns. /// /// Dieser Bildschirm fasst sie zu einem Ziel zusammen. Damit bleibt die Leiste /// unter fünf Einträgen, und die Mediatheken stehen trotzdem alle da — mit /// mehr Platz für ihre Namen, als eine Leiste je hätte. struct LibraryHubView: View { @Environment(FlixySession.self) private var session @Environment(\.flixyAccent) private var accent var body: some View { List { if session.libraries.isEmpty { Text("libraryHub.empty") .foregroundStyle(Color.flixyTextSecondary) .listRowBackground(Color.flixySurface) } else { Section("sidebar.libraries") { ForEach(session.libraries) { library in NavigationLink(value: LibraryRoute(id: library.id)) { Label(library.title, systemImage: symbol(for: library.kind)) } .listRowBackground(Color.flixySurface) } } } if session.supportsLiveTV { Section { NavigationLink(value: LiveTVRoute()) { Label("sidebar.liveTV", systemImage: "dot.radiowaves.left.and.right") } .listRowBackground(Color.flixySurface) } } } .tint(accent) .scrollContentBackground(.hidden) .background(Color.flixyCanvas) .navigationTitle(Text("sidebar.library")) .flixyInlineTitle() } private func symbol(for kind: MediaLibrary.Kind) -> String { switch kind { case .movie: "film" case .show: "tv" default: "rectangle.stack" } } }