Make sure that FeedFinder and InitialDownloader are running on the main thread.
This commit is contained in:
parent
e42520cd9b
commit
93fbbd4cc3
|
@ -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))
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue