Zwei Bugs beim Teilen aus Safari/anderen Apps: 1. Leeres Sheet flackerte auf — bare UIViewController/NSViewController hatten kein UI und dismissed sofort. Jetzt: kurzer Cream-Card-Toast mit ✓-Icon + "Zur Lese-Liste hinzugefügt" (~0.8s), fade-out, dismiss. Bei "keine URL gefunden" → orange ⚠-Variante. 2. Geteilter Artikel erschien erst nach App-Termination + Restart — flushPendingShares() lief parallel zum initialen loadArticles() der LeseListe (GET schneller als POST + Crawl → Liste sah Artikel nicht). Plus: kein scenePhase-Hook, also kein Reload bei Foreground. Fix: neuer PendingShareSignal (@Observable @MainActor) im Environment. flushPendingShares() bumpt den Tick nach jedem Save, LeseListeTabView reloaded via .onChange. PagetaNativeApp jetzt mit .onChange(of: scenePhase, initial: true) statt .onAppear — fängt sowohl Cold-Launch als auch Background→Foreground (= typischer Flow nach Share aus Safari). iOS Sim BUILD SUCCEEDED, macOS BUILD SUCCEEDED (ohne Signing wegen Provisioning-Block), 38/38 Tests pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
24 lines
909 B
Swift
24 lines
909 B
Swift
import Foundation
|
|
import Observation
|
|
|
|
/// Coordinator-Signal zwischen App-Level-Drain und der Lese-Liste.
|
|
///
|
|
/// Wenn `PagetaNativeApp.flushPendingShares()` eine URL aus dem
|
|
/// `PendingShareStore` erfolgreich an den Server gepostet hat, ruft es
|
|
/// `bump()`. Views, die auf neue Artikel reagieren sollen
|
|
/// (z.B. `LeseListeTabView`), beobachten `flushedTick` via
|
|
/// `.onChange` und reloaden ihre Daten.
|
|
///
|
|
/// **Warum nicht NotificationCenter:** unter Swift-6-Strict-Concurrency
|
|
/// sperrig (Sendable über @objc + Notification.userInfo). Observable +
|
|
/// Environment ist Swift-nativ, testbar und sichtbar im Dependency-Graphen.
|
|
@MainActor @Observable
|
|
final class PendingShareSignal {
|
|
/// Inkrementiert mit jedem erfolgreichen Flush eines Pending-Shares.
|
|
/// Verbraucher beobachten via `.onChange(of: signal.flushedTick)`.
|
|
private(set) var flushedTick: Int = 0
|
|
|
|
func bump() {
|
|
flushedTick += 1
|
|
}
|
|
}
|