Drei Dinge aus dem letzten Durchgang. **Die Startseite hatte zu wenig anzubieten.** Es gab eine Reihe „Zuletzt hinzugefügt" für alles zusammen. Jetzt gibt es eine je Mediathek — „Neu in Filme" und „Neu in Serien" sind zwei verschiedene Fragen, und wer nach einem Film sucht, blättert in einer gemeinsamen Reihe an Folgen vorbei. Dazu Favoriten, die es bei Jellyfin ohnehin gibt. Die drei Abfragen laufen nebeneinander; nur die Mediatheken werden streng geholt, weil sie die Probe darauf sind, ob der Server überhaupt antwortet. **Die Seitenleiste ist jetzt echtes Glas**, nicht das alte Material: im ausfahrbaren Blatt über `glassEffect`, in der geteilten Ansicht auf dem iPad vom System selbst — dort lag mein eigener Hintergrund darüber und machte ihn stumpf. Die zum Inhalt zeigende Kante ist gerundet, damit das Blatt sichtbar über der Seite liegt statt daneben zu stehen. **Die Navigation kann nach oben.** Eine Einstellung unter Erscheinungsbild, seitlich oder oben. Oben stehen alle Einträge gleichzeitig da, als Glaskapseln in einer waagerecht scrollenden Reihe — die Zahl der Mediatheken kommt vom Server, und zusammengequetschte Beschriftungen wären die schlechtere Antwort als eine Reihe, die weiterläuft. Angesehen auf iPhone und iPad: beide Formen, das Glas in beiden Leisten, die neuen Reihen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
37 lines
1.1 KiB
Swift
37 lines
1.1 KiB
Swift
import Foundation
|
|
import Observation
|
|
|
|
/// Wo die Navigation sitzt.
|
|
///
|
|
/// Eine Einstellung, kein fester Aufbau: auf einem großen Bildschirm ist eine
|
|
/// Leiste an der Seite richtig, auf einem kleinen nimmt sie Platz weg, den man
|
|
/// lieber dem Bild gäbe. Wer welche Form will, entscheidet nicht die App.
|
|
@MainActor
|
|
@Observable
|
|
final class NavigationSettings {
|
|
enum Placement: String, CaseIterable, Identifiable, Sendable {
|
|
/// Seitlich — auf dem iPhone ausfahrbar, auf dem iPad dauerhaft.
|
|
case side
|
|
/// Oben als Reihe über dem Inhalt.
|
|
case top
|
|
|
|
var id: String { rawValue }
|
|
}
|
|
|
|
private enum Key {
|
|
static let placement = "flixy.navigation.placement"
|
|
}
|
|
|
|
private let defaults: UserDefaults
|
|
|
|
var placement: Placement {
|
|
didSet { defaults.set(placement.rawValue, forKey: Key.placement) }
|
|
}
|
|
|
|
init(defaults: UserDefaults = .standard) {
|
|
self.defaults = defaults
|
|
self.placement = defaults.string(forKey: Key.placement)
|
|
.flatMap(Placement.init(rawValue:)) ?? .side
|
|
}
|
|
}
|