Stub out subscription delete

This commit is contained in:
Maurice Parker 2020-04-04 05:02:33 -05:00
parent cceec096a9
commit adefcc7c3f
3 changed files with 42 additions and 16 deletions

View File

@ -30,9 +30,10 @@ final class CloudKitAccountDelegate: AccountDelegate {
return CKContainer(identifier: "iCloud.\(orgID).NetNewsWire") return CKContainer(identifier: "iCloud.\(orgID).NetNewsWire")
}() }()
private lazy var zones: [CloudKitZone] = [accountZone, articlesZone] private lazy var zones: [CloudKitZone] = [accountZone, articlesZone, publicZone]
private let accountZone: CloudKitAccountZone private let accountZone: CloudKitAccountZone
private let articlesZone: CloudKitArticlesZone private let articlesZone: CloudKitArticlesZone
private let publicZone: CloudKitPublicZone
private let refresher = LocalAccountRefresher() private let refresher = LocalAccountRefresher()
@ -48,6 +49,7 @@ final class CloudKitAccountDelegate: AccountDelegate {
init(dataFolder: String) { init(dataFolder: String) {
accountZone = CloudKitAccountZone(container: container) accountZone = CloudKitAccountZone(container: container)
articlesZone = CloudKitArticlesZone(container: container) articlesZone = CloudKitArticlesZone(container: container)
publicZone = CloudKitPublicZone(container: container)
let databaseFilePath = (dataFolder as NSString).appendingPathComponent("Sync.sqlite3") let databaseFilePath = (dataFolder as NSString).appendingPathComponent("Sync.sqlite3")
database = SyncDatabase(databaseFilePath: databaseFilePath) database = SyncDatabase(databaseFilePath: databaseFilePath)
@ -259,9 +261,13 @@ final class CloudKitAccountDelegate: AccountDelegate {
accountZone.removeWebFeed(feed, from: container) { result in accountZone.removeWebFeed(feed, from: container) { result in
self.refreshProgress.completeTask() self.refreshProgress.completeTask()
switch result { switch result {
case .success: case .success(let deleted):
container.removeWebFeed(feed) container.removeWebFeed(feed)
completion(.success(())) if deleted {
self.publicZone.removeSubscription(feed, completion: completion)
} else {
completion(.success(()))
}
case .failure(let error): case .failure(let error):
completion(.failure(error)) completion(.failure(error))
} }

View File

@ -125,8 +125,8 @@ final class CloudKitAccountZone: CloudKitZone {
} }
} }
/// Deletes a web feed from iCloud /// Removes a web feed from a container and optionally deletes it, calling the completion with true if deleted
func removeWebFeed(_ webFeed: WebFeed, from: Container, completion: @escaping (Result<Void, Error>) -> Void) { func removeWebFeed(_ webFeed: WebFeed, from: Container, completion: @escaping (Result<Bool, Error>) -> Void) {
guard let fromContainerExternalID = from.externalID else { guard let fromContainerExternalID = from.externalID else {
completion(.failure(CloudKitZoneError.invalidParameter)) completion(.failure(CloudKitZoneError.invalidParameter))
return return
@ -135,16 +135,36 @@ final class CloudKitAccountZone: CloudKitZone {
fetch(externalID: webFeed.externalID) { result in fetch(externalID: webFeed.externalID) { result in
switch result { switch result {
case .success(let record): case .success(let record):
if let containerExternalIDs = record[CloudKitWebFeed.Fields.containerExternalIDs] as? [String] { if let containerExternalIDs = record[CloudKitWebFeed.Fields.containerExternalIDs] as? [String] {
var containerExternalIDSet = Set(containerExternalIDs) var containerExternalIDSet = Set(containerExternalIDs)
containerExternalIDSet.remove(fromContainerExternalID) containerExternalIDSet.remove(fromContainerExternalID)
if containerExternalIDSet.isEmpty { if containerExternalIDSet.isEmpty {
self.delete(externalID: webFeed.externalID , completion: completion) self.delete(externalID: webFeed.externalID) { result in
switch result {
case .success:
completion(.success(true))
case .failure(let error):
completion(.failure(error))
}
}
} else { } else {
record[CloudKitWebFeed.Fields.containerExternalIDs] = Array(containerExternalIDSet) record[CloudKitWebFeed.Fields.containerExternalIDs] = Array(containerExternalIDSet)
self.save(record, completion: completion) self.save(record) { result in
switch result {
case .success:
completion(.success(false))
case .failure(let error):
completion(.failure(error))
}
}
} }
} }
case .failure(let error): case .failure(let error):
completion(.failure(error)) completion(.failure(error))
} }

View File

@ -31,14 +31,6 @@ final class CloudKitPublicZone: CloudKitZone {
} }
} }
struct CloudKitWebFeedCheck {
static let recordType = "UserSubscription"
struct Fields {
static let webFeed = "webFeed"
static let subscriptionID = "oldestPossibleCheckTime"
}
}
struct CloudKitUserSubscription { struct CloudKitUserSubscription {
static let recordType = "UserSubscription" static let recordType = "UserSubscription"
struct Fields { struct Fields {
@ -48,11 +40,19 @@ final class CloudKitPublicZone: CloudKitZone {
} }
} }
init(container: CKContainer) {
self.container = container
self.database = container.publicCloudDatabase
}
func subscribe() {} func subscribe() {}
func receiveRemoteNotification(userInfo: [AnyHashable : Any], completion: @escaping () -> Void) { func receiveRemoteNotification(userInfo: [AnyHashable : Any], completion: @escaping () -> Void) {
} }
func removeSubscription(_ webFeed: WebFeed, completion: @escaping (Result<Void, Error>) -> Void) {
}
} }