diff --git a/Tusker/Screens/Compose/ComposeAutocompleteView.swift b/Tusker/Screens/Compose/ComposeAutocompleteView.swift index 000be703..6351659b 100644 --- a/Tusker/Screens/Compose/ComposeAutocompleteView.swift +++ b/Tusker/Screens/Compose/ComposeAutocompleteView.swift @@ -143,9 +143,12 @@ struct ComposeAutocompleteMentionsView: View { localSearchWorkItem.cancel() - // if the query has changed, don't bother loading the now-outdated results - if case .mention(query) = uiState.autocompleteState { - self.loadAccounts(accounts.map { .pachyderm($0) }, query: query) + // dispatch back to the main thread because loadAccounts uses CoreData + DispatchQueue.main.async { + // if the query has changed, don't bother loading the now-outdated results + if case .mention(query) = uiState.autocompleteState { + self.loadAccounts(accounts.map { .pachyderm($0) }, query: query) + } } } } @@ -161,8 +164,20 @@ struct ComposeAutocompleteMentionsView: View { return res } .filter(\.1.matched) - // todo: it would be nice to prioritize followee/follower accounts, but relationships aren't cached - .sorted { $0.1.score > $1.1.score } + .map { (account, res) -> (EitherAccount, Int) in + // give higher weight to accounts that the user follows or is followed by + var score = res.score + if let relationship = mastodonController.persistentContainer.relationship(forAccount: account.id) { + if relationship.following { + score += 3 + } + if relationship.followedBy { + score += 2 + } + } + return (account, score) + } + .sorted { $0.1 > $1.1 } .map(\.0) }