Fixed restore folder functionality for Feedbin.
This commit is contained in:
parent
e8992dac95
commit
1cfc3bceef
@ -269,18 +269,46 @@ final class FeedbinAccountDelegate: AccountDelegate {
|
|||||||
let group = DispatchGroup()
|
let group = DispatchGroup()
|
||||||
|
|
||||||
for feed in folder.topLevelFeeds {
|
for feed in folder.topLevelFeeds {
|
||||||
|
|
||||||
|
if feed.folderRelationship?.count ?? 0 > 1 {
|
||||||
|
|
||||||
|
if let feedTaggingID = feed.folderRelationship?[folder.name ?? ""] {
|
||||||
group.enter()
|
group.enter()
|
||||||
removeFeed(for: account, with: feed, from: folder) { result in
|
caller.deleteTagging(taggingID: feedTaggingID) { result in
|
||||||
group.leave()
|
group.leave()
|
||||||
switch result {
|
switch result {
|
||||||
case .success:
|
case .success:
|
||||||
break
|
DispatchQueue.main.async {
|
||||||
|
self.clearFolderRelationship(for: feed, withFolderName: folder.name ?? "")
|
||||||
|
}
|
||||||
case .failure(let error):
|
case .failure(let error):
|
||||||
os_log(.error, log: self.log, "Remove feed error: %@.", error.localizedDescription)
|
os_log(.error, log: self.log, "Remove feed error: %@.", error.localizedDescription)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if let subscriptionID = feed.subscriptionID {
|
||||||
|
group.enter()
|
||||||
|
caller.deleteSubscription(subscriptionID: subscriptionID) { result in
|
||||||
|
group.leave()
|
||||||
|
switch result {
|
||||||
|
case .success:
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
account.clearFeedMetadata(feed)
|
||||||
|
}
|
||||||
|
case .failure(let error):
|
||||||
|
os_log(.error, log: self.log, "Remove feed error: %@.", error.localizedDescription)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
group.notify(queue: DispatchQueue.main) {
|
group.notify(queue: DispatchQueue.main) {
|
||||||
account.removeFolder(folder)
|
account.removeFolder(folder)
|
||||||
completion(.success(()))
|
completion(.success(()))
|
||||||
@ -347,7 +375,6 @@ final class FeedbinAccountDelegate: AccountDelegate {
|
|||||||
if feed.folderRelationship?.count ?? 0 > 1 {
|
if feed.folderRelationship?.count ?? 0 > 1 {
|
||||||
deleteTagging(for: account, with: feed, from: container, completion: completion)
|
deleteTagging(for: account, with: feed, from: container, completion: completion)
|
||||||
} else {
|
} else {
|
||||||
account.clearFeedMetadata(feed)
|
|
||||||
deleteSubscription(for: account, with: feed, from: container, completion: completion)
|
deleteSubscription(for: account, with: feed, from: container, completion: completion)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -399,6 +426,16 @@ final class FeedbinAccountDelegate: AccountDelegate {
|
|||||||
|
|
||||||
func restoreFeed(for account: Account, feed: Feed, container: Container, completion: @escaping (Result<Void, Error>) -> Void) {
|
func restoreFeed(for account: Account, feed: Feed, container: Container, completion: @escaping (Result<Void, Error>) -> Void) {
|
||||||
|
|
||||||
|
if let existingFeed = account.existingFeed(withURL: feed.url) {
|
||||||
|
account.addFeed(existingFeed, to: container) { result in
|
||||||
|
switch result {
|
||||||
|
case .success:
|
||||||
|
completion(.success(()))
|
||||||
|
case .failure(let error):
|
||||||
|
completion(.failure(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
createFeed(for: account, url: feed.url, name: feed.editedName, container: container) { result in
|
createFeed(for: account, url: feed.url, name: feed.editedName, container: container) { result in
|
||||||
switch result {
|
switch result {
|
||||||
case .success:
|
case .success:
|
||||||
@ -407,27 +444,33 @@ final class FeedbinAccountDelegate: AccountDelegate {
|
|||||||
completion(.failure(error))
|
completion(.failure(error))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func restoreFolder(for account: Account, folder: Folder, completion: @escaping (Result<Void, Error>) -> Void) {
|
func restoreFolder(for account: Account, folder: Folder, completion: @escaping (Result<Void, Error>) -> Void) {
|
||||||
|
|
||||||
account.addFolder(folder)
|
|
||||||
let group = DispatchGroup()
|
let group = DispatchGroup()
|
||||||
|
|
||||||
for feed in folder.topLevelFeeds {
|
for feed in folder.topLevelFeeds {
|
||||||
|
|
||||||
|
folder.topLevelFeeds.remove(feed)
|
||||||
|
|
||||||
group.enter()
|
group.enter()
|
||||||
addFeed(for: account, with: feed, to: folder) { result in
|
restoreFeed(for: account, feed: feed, container: folder) { result in
|
||||||
if account.topLevelFeeds.contains(feed) {
|
|
||||||
account.removeFeed(feed)
|
|
||||||
}
|
|
||||||
group.leave()
|
group.leave()
|
||||||
|
switch result {
|
||||||
|
case .success:
|
||||||
|
break
|
||||||
|
case .failure(let error):
|
||||||
|
os_log(.error, log: self.log, "Restore folder feed error: %@.", error.localizedDescription)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
group.notify(queue: DispatchQueue.main) {
|
group.notify(queue: DispatchQueue.main) {
|
||||||
|
account.addFolder(folder)
|
||||||
completion(.success(()))
|
completion(.success(()))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1158,6 +1201,7 @@ private extension FeedbinAccountDelegate {
|
|||||||
switch result {
|
switch result {
|
||||||
case .success:
|
case .success:
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
|
account.clearFeedMetadata(feed)
|
||||||
account.removeFeed(feed)
|
account.removeFeed(feed)
|
||||||
if let folders = account.folders {
|
if let folders = account.folders {
|
||||||
for folder in folders {
|
for folder in folders {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user