iOS: Shop nur am Nicht-Einzelstück; QR-Fehler nennt den Server

- „Gekauft bei" (Shop) gehoert bei Einzelstuecken zum einzelnen Stueck, nicht
  ans Modell. Wie im Web wird der Shop-Picker am Produkt jetzt ausgeblendet,
  sobald „Einzelstuecke" aktiv ist; der Produktlink (beschreibt das Produkt
  allgemein) bleibt. Beim Speichern wird fuer Einzelstuecke kein Shop ans
  Modell geschrieben.
- Wird ein gescanntes Einzelstueck nicht gefunden, nennt die Meldung jetzt den
  abgefragten Server und den Original-Fehler. So ist sofort erkennbar, ob der
  aktive Server ein anderer ist als der im QR-Code (haeufigste Ursache bei
  korrekter UID) oder ob ein Netz-/Serverfehler vorliegt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-26 11:15:38 +02:00
parent 1a5a5bc16c
commit dcee7cab6c
2 changed files with 19 additions and 7 deletions

View File

@@ -47,14 +47,19 @@ struct RootView: View {
.task(id: router.openItemUid) {
guard let uid = router.openItemUid else { return }
router.openItemUid = nil
let host = session.activeProfile?.url?.host ?? "?"
guard session.isLoggedIn else {
linkError = "Bitte zuerst am passenden Server anmelden, dann erneut scannen."
linkError = "Bitte zuerst am Server \(host) anmelden, dann erneut scannen."
return
}
do {
linkedItem = try await APIClient.shared.itemByUid(uid: uid)
} catch {
linkError = "Einzelstück \(uid) nicht gefunden: \(error.localizedDescription)"
// Bei korrekter UID heißt 404 fast immer: der aktive Server ist ein
// anderer als der im QR-Code. Deshalb den Server benennen.
linkError = "Einzelstück \(uid) auf Server \(host) nicht gefunden. "
+ "Zeigt der QR-Code auf denselben Server wie der oben gewählte? "
+ "(\(error.localizedDescription))"
}
}
.sheet(item: $linkedItem) { it in