import Foundation /// Was in der Seitenleiste steht. /// /// Die Mediatheken kommen erst zur Laufzeit vom Server, deshalb trägt /// `library` den Schlüssel des Abschnitts statt eines festen Falls. enum SidebarDestination: Hashable { case home case library(key: String, title: String) /// Alle Mediatheken zusammen — auf schmalen Bildschirmen an ihrer Stelle. case libraryHub case search case liveTV case downloads case settings /// Eine feste Kennung zum Speichern. /// /// **Ohne** den Titel: benennt jemand eine Mediathek auf dem Server um, /// soll sie ihren Platz in der Seitenleiste behalten und nicht als neuer /// Eintrag ganz unten auftauchen. var storageKey: String { switch self { case .home: "home" case .library(let key, _): "library:\(key)" case .libraryHub: "libraryHub" case .search: "search" case .liveTV: "liveTV" case .downloads: "downloads" case .settings: "settings" } } /// Der Titel in der Navigationsleiste. /// /// Auf der Startseite steht dort der Name der App — in der Seitenleiste /// wäre das nur eine Dopplung der Überschrift, deshalb hat sie mit /// `sidebarLabel` einen eigenen Text. var title: String { switch self { case .home: Branding.appName case .library(_, let title): title case .libraryHub: String(localized: "sidebar.library") case .search: String(localized: "search.title") case .liveTV: String(localized: "sidebar.liveTV") case .downloads: String(localized: "sidebar.downloads") case .settings: String(localized: "sidebar.settings") } } /// Die Beschriftung in der Seitenleiste. var sidebarLabel: String { switch self { case .home: String(localized: "sidebar.home") default: title } } var symbol: String { switch self { case .home: "house" case .library: "film" case .libraryHub: "books.vertical" case .search: "magnifyingglass" case .liveTV: "dot.radiowaves.left.and.right" case .downloads: "arrow.down.circle" case .settings: "gearshape" } } } /// Der Weg zur Suche, wenn sie kein eigener Eintrag ist. /// /// Auf dem iPhone hat die Leiste unten fünf Plätze, und einer davon für die /// Suche ist einer zu viel — sie sitzt dort, wo man sie sucht: über der /// Mediathek, neben Filter und Ansicht. struct SearchRoute: Hashable {}