mirror of
https://github.com/yattee/yattee.git
synced 2026-10-23 05:02:53 +00:00
Invalidate the subscription feed when subscriptions change (#968)
Subscribing or unsubscribing, locally or via iCloud, only posted a notification, so the cached feed stayed valid and Yattee Server never received the new channel list until the cache expired. Invalidate the feed cache on every subscription add and removal, and skip the disk write when it is already stale.
This commit is contained in:
@@ -104,7 +104,8 @@ actor FeedCache {
|
||||
/// Invalidates the cache by clearing the lastUpdated timestamp.
|
||||
/// The cached videos remain available but will be considered stale.
|
||||
func invalidate() async {
|
||||
guard var data = cachedData else { return }
|
||||
// Already stale: skip the disk write (remote syncs invalidate once per record).
|
||||
guard var data = cachedData, data.lastUpdated != .distantPast else { return }
|
||||
data.lastUpdated = .distantPast
|
||||
cachedData = data
|
||||
await save(videos: data.videos, lastUpdated: .distantPast)
|
||||
|
||||
@@ -31,7 +31,10 @@ extension DataManager {
|
||||
|
||||
// Queue for CloudKit sync
|
||||
cloudKitSync?.queueSubscriptionSave(subscription)
|
||||
|
||||
|
||||
// The stateless feed must be rebuilt from the new channel list (#968)
|
||||
SubscriptionFeedCache.shared.invalidate()
|
||||
|
||||
let change = SubscriptionChange(addedSubscriptions: [subscription], removedChannelIDs: [])
|
||||
NotificationCenter.default.post(
|
||||
name: .subscriptionsDidChange,
|
||||
@@ -71,6 +74,8 @@ extension DataManager {
|
||||
cloudKitSync?.queueSubscriptionDelete(channelID: channelID, scope: scope)
|
||||
}
|
||||
|
||||
SubscriptionFeedCache.shared.invalidate()
|
||||
|
||||
let change = SubscriptionChange(addedSubscriptions: [], removedChannelIDs: [channelID])
|
||||
NotificationCenter.default.post(
|
||||
name: .subscriptionsDidChange,
|
||||
|
||||
@@ -2693,7 +2693,8 @@ extension CloudKitSyncEngine: CKSyncEngineDelegate {
|
||||
} else {
|
||||
// New subscription from iCloud
|
||||
dataManager.insertSubscription(subscription)
|
||||
|
||||
SubscriptionFeedCache.shared.invalidate()
|
||||
|
||||
// Post notification to update UI
|
||||
let change = SubscriptionChange(addedSubscriptions: [subscription], removedChannelIDs: [])
|
||||
NotificationCenter.default.post(
|
||||
@@ -3125,6 +3126,7 @@ extension CloudKitSyncEngine: CKSyncEngineDelegate {
|
||||
if let subscription = localSubscription(matching: recordName, channelID: channelID, in: dataManager) {
|
||||
dataManager.deleteSubscription(subscription)
|
||||
dataManager.save()
|
||||
SubscriptionFeedCache.shared.invalidate()
|
||||
let change = SubscriptionChange(addedSubscriptions: [], removedChannelIDs: [channelID])
|
||||
NotificationCenter.default.post(
|
||||
name: .subscriptionsDidChange,
|
||||
|
||||
Reference in New Issue
Block a user