Stub out subscription delete
This commit is contained in:
parent
cceec096a9
commit
adefcc7c3f
|
@ -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))
|
||||||
}
|
}
|
||||||
|
|
|
@ -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))
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue