Restore the infrastructure for saving conditional GET info, since the built-in caching isn’t handling this as well as it appeared at first.

This commit is contained in:
Brent Simmons
2024-11-30 20:04:56 -08:00
parent 670e046b9b
commit 738dac6a49
7 changed files with 46 additions and 2 deletions

View File

@@ -919,6 +919,14 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container,
// MARK: - Debug
public func debugDropConditionalGetInfo() {
#if DEBUG
for feed in flattenedWebFeeds() {
feed.dropConditionalGetInfo()
}
#endif
}
public func debugRunSearch() {
#if DEBUG
let t1 = Date()

View File

@@ -792,6 +792,7 @@ private extension CloudKitAccountDelegate {
return
}
self.articlesZone.deleteArticles(webFeedExternalID) { result in
feed.dropConditionalGetInfo()
self.syncProgress.completeTask()
completion(result)
}

View File

@@ -82,8 +82,9 @@ class CloudKitAcountZoneDelegate: CloudKitZoneDelegate {
func removeWebFeed(_ externalID: String) {
if let webFeed = account?.existingWebFeed(withExternalID: externalID), let containers = account?.existingContainers(withWebFeed: webFeed) {
containers.forEach {
$0.removeWebFeed(webFeed)
for container in containers {
webFeed.dropConditionalGetInfo()
container.removeWebFeed(webFeed)
}
}
}

View File

@@ -26,6 +26,7 @@ public extension WebFeed {
public static let editedName = "editedName"
public static let authors = "authors"
public static let contentHash = "contentHash"
public static let conditionalGetInfo = "conditionalGetInfo"
}
}

View File

@@ -123,6 +123,15 @@ public final class WebFeed: Feed, Renamable, Hashable {
}
}
public var conditionalGetInfo: HTTPConditionalGetInfo? {
get {
return metadata.conditionalGetInfo
}
set {
metadata.conditionalGetInfo = newValue
}
}
public var contentHash: String? {
get {
return metadata.contentHash
@@ -235,6 +244,13 @@ public final class WebFeed: Feed, Renamable, Hashable {
self.metadata = metadata
}
// MARK: - API
public func dropConditionalGetInfo() {
conditionalGetInfo = nil
contentHash = nil
}
// MARK: - Hashable
public func hash(into hasher: inout Hasher) {

View File

@@ -26,6 +26,7 @@ final class WebFeedMetadata: Codable {
case contentHash
case isNotifyAboutNewArticles
case isArticleExtractorAlwaysOn
case conditionalGetInfo
case externalID = "subscriptionID"
case folderRelationship
}
@@ -102,6 +103,14 @@ final class WebFeedMetadata: Codable {
}
}
var conditionalGetInfo: HTTPConditionalGetInfo? {
didSet {
if conditionalGetInfo != oldValue {
valueDidChange(.conditionalGetInfo)
}
}
}
var externalID: String? {
didSet {
if externalID != oldValue {

View File

@@ -704,6 +704,14 @@ extension AppDelegate {
AccountManager.shared.defaultAccount.debugRunSearch()
}
@IBAction func debugDropConditionalGetInfo(_ sender: Any?) {
#if DEBUG
for account in AccountManager.shared.activeAccounts {
account.debugDropConditionalGetInfo()
}
#endif
}
@IBAction func debugTestCrashReporterWindow(_ sender: Any?) {
#if DEBUG
crashReportWindowController = CrashReportWindowController(crashLogText: "This is a test crash log.")