diff --git a/ios/App/AppZustand.swift b/ios/App/AppZustand.swift index c5789ee..cc38fab 100644 --- a/ios/App/AppZustand.swift +++ b/ios/App/AppZustand.swift @@ -31,6 +31,12 @@ final class AppZustand { private(set) var einstellungen = Einstellungen() private(set) var client: CertainClient? + /// Kategorien, Schlagwörter und Konten – einmal geladen, von allen + /// Listen benutzt. Jede Zeile will zu einer ID den Namen, das Symbol und + /// die Farbe; das je Ansicht neu zu holen wäre genau das N+1, das das + /// Backend sich selbst verbietet. + private(set) var nachschlag = Nachschlag.leer + /// Die letzte Meldung für den Anmeldebildschirm. Keine Fehleransicht, /// sondern eine Zeile unter dem Formular. var meldung: String? @@ -61,8 +67,12 @@ final class AppZustand { guard let client else { return } do { let ich = try await client.ichSelbst() + // Muss gemerkt werden, sonst greift der Offline-Zweig unten nie: + // Niemand sonst schreibt unter diesem Schlüssel. + Zwischenspeicher.lege(ich, unter: "auth/me") einstellungen = (try? await client.einstellungen()) ?? Einstellungen() lage = .bereit(ich) + await ladeNachschlag() } catch APIFehler.nichtAngemeldet { // Marke widerrufen oder gelöscht – neu anmelden, Adresse behalten. Ablage.marke = nil @@ -77,6 +87,7 @@ final class AppZustand { // Ansichten den letzten Stand. Die Marke ist ja da. if let gemerkt = Zwischenspeicher.hole(Benutzer.self, unter: "auth/me") { lage = .bereit(gemerkt.wert) + await ladeNachschlag() } else { meldung = error.localizedDescription lage = .brauchtAnmeldung @@ -240,6 +251,20 @@ final class AppZustand { if let frisch = try? await client.einstellungen() { einstellungen = frisch } } + /// Holt das Nachschlagewerk. Geht das schief, bleibt der letzte Stand – + /// eine Buchungsliste ohne Kategorienamen wäre schlechter als eine mit + /// alten. + func ladeNachschlag() async { + guard let client else { return } + if let frisch = try? await client.nachschlag() { + Zwischenspeicher.lege(frisch, unter: "nachschlag") + nachschlag = frisch + } else if nachschlag.gruppen.isEmpty, + let gemerkt = Zwischenspeicher.hole(Nachschlag.self, unter: "nachschlag") { + nachschlag = gemerkt.wert + } + } + // MARK: - Kleinkram /// Der Name, unter dem die Marke am Rechner auftaucht. Soll erkennbar