Feed resilience, clearer empty states, and read/unread
- Don't blank the feed on refresh: keep current stories until new data arrives, and ignore benign URLError.cancelled (-999) so a network blip no longer wipes the list. Coalesce WebSocket story.created bursts into a single debounced refresh. - Empty state now distinguishes polling, couldn't-reach-server (with the error + host + Retry), offline, and genuinely-empty. - Track read stories in SwiftData (ReadStory); mark a story read when opened and drop/dim its signal stripe across the feed and Latest/Saved/Search. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -6,10 +6,12 @@ import SwiftUI
|
||||
struct SignalStripe: View {
|
||||
let score: Int
|
||||
var width: CGFloat = 3
|
||||
/// Read stories drop the colored stripe for a neutral one.
|
||||
var muted: Bool = false
|
||||
|
||||
var body: some View {
|
||||
Rectangle()
|
||||
.fill(Signal.stripeColor(score))
|
||||
.fill(muted ? Palette.hairline : Signal.stripeColor(score))
|
||||
.frame(width: width)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user