Make sure that FeedFinder and InitialDownloader are running on the main thread.

This commit is contained in:
Maurice Parker 2019-06-10 08:21:03 -05:00
parent e42520cd9b
commit 93fbbd4cc3
2 changed files with 34 additions and 43 deletions

View File

@ -93,51 +93,39 @@ final class LocalAccountDelegate: AccountDelegate {
return return
} }
DispatchQueue.global(qos: .userInitiated).async { FeedFinder.find(url: url) { result in
FeedFinder.find(url: url) { result in switch result {
case .success(let feedSpecifiers):
switch result { guard let bestFeedSpecifier = FeedSpecifier.bestFeed(in: feedSpecifiers),
case .success(let feedSpecifiers): let url = URL(string: bestFeedSpecifier.urlString) else {
guard let bestFeedSpecifier = FeedSpecifier.bestFeed(in: feedSpecifiers),
let url = URL(string: bestFeedSpecifier.urlString) else {
DispatchQueue.main.async {
completion(.failure(AccountError.createErrorNotFound))
}
return
}
if account.hasFeed(withURL: bestFeedSpecifier.urlString) {
DispatchQueue.main.async {
completion(.failure(AccountError.createErrorAlreadySubscribed))
}
return
}
let feed = account.createFeed(with: nil, url: url.absoluteString, feedID: url.absoluteString, homePageURL: nil)
InitialFeedDownloader.download(url) { parsedFeed in
if let parsedFeed = parsedFeed {
account.update(feed, with: parsedFeed, {})
}
feed.editedName = name
container.addFeed(feed)
DispatchQueue.main.async {
completion(.success(feed))
}
}
case .failure:
DispatchQueue.main.async {
completion(.failure(AccountError.createErrorNotFound)) completion(.failure(AccountError.createErrorNotFound))
} return
} }
if account.hasFeed(withURL: bestFeedSpecifier.urlString) {
completion(.failure(AccountError.createErrorAlreadySubscribed))
return
}
let feed = account.createFeed(with: nil, url: url.absoluteString, feedID: url.absoluteString, homePageURL: nil)
InitialFeedDownloader.download(url) { parsedFeed in
if let parsedFeed = parsedFeed {
account.update(feed, with: parsedFeed, {})
}
feed.editedName = name
container.addFeed(feed)
completion(.success(feed))
}
case .failure:
completion(.failure(AccountError.createErrorNotFound))
} }
} }

View File

@ -62,7 +62,10 @@ class AddFeedController: AddFeedWindowControllerDelegate {
account.createFeed(url: url.absoluteString, name: title, container: container) { result in account.createFeed(url: url.absoluteString, name: title, container: container) { result in
self.endShowingProgress() DispatchQueue.main.async {
self.endShowingProgress()
}
BatchUpdate.shared.end() BatchUpdate.shared.end()
switch result { switch result {