From 58bd504333ed6c08316f9ba198c07411c1569dfc Mon Sep 17 00:00:00 2001 From: Guido Date: Wed, 21 Oct 2026 20:23:49 +0200 Subject: [PATCH] fix: Der Offline-Start zeigt wieder den letzten Stand AppZustand faellt beim Start ohne Verbindung auf den gemerkten Benutzer zurueck - nur schrieb diesen Schluessel niemand je in den Zwischenspeicher. Der Zweig konnte also nie greifen, und die App verlangte im Flugmodus eine neue Anmeldung, obwohl die Geraetemarke laengst da war. Gefunden beim Durchsehen fuer Stufe 2: Nur Lader und das Nachschlagewerk schreiben in den Speicher, und auth/me geht an beiden vorbei. Co-Authored-By: Claude Opus 5 --- ios/App/AppZustand.swift | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) 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