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:
@@ -188,6 +188,17 @@ final class CachedStory {
|
||||
}
|
||||
}
|
||||
|
||||
@Model
|
||||
final class ReadStory {
|
||||
@Attribute(.unique) var id: String
|
||||
var readAt: Date
|
||||
|
||||
init(id: String) {
|
||||
self.id = id
|
||||
self.readAt = Date()
|
||||
}
|
||||
}
|
||||
|
||||
@Model
|
||||
final class CachedArticle {
|
||||
@Attribute(.unique) var id: String
|
||||
|
||||
Reference in New Issue
Block a user