Change random server picking logic to require "general" category, prefer no approval and own language code (#929)

This commit is contained in:
Marcus Kida 2023-02-08 23:41:49 +01:00 committed by GitHub
parent 70d939c3ad
commit fe12019370
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 31 additions and 3 deletions

View File

@ -235,9 +235,37 @@ extension MastodonPickServerViewModel {
let servers = indexedServers.value
guard servers.isNotEmpty else { return nil }
let randomServer = servers.filter {
$0.language.lowercased() == language
}.randomElement()
let generalServers = servers.filter {
$0.categories.contains("general")
}
let randomServer: Mastodon.Entity.Server?
let noApprovalRequired = generalServers.filter { !$0.approvalRequired }
let approvalRequired = generalServers.filter { $0.approvalRequired }
let languageMatchesWithoutApproval = noApprovalRequired.filter { $0.language.lowercased() == language }
let languageMatchesWithApproval = approvalRequired.filter { $0.language.lowercased() == language }
let languageDoesNotMatchWithoutApproval = noApprovalRequired.filter { $0.language.lowercased() != language }
let languageDoesNotMatchWithApproval = approvalRequired.filter { $0.language.lowercased() != language }
switch (
languageMatchesWithoutApproval.isEmpty,
languageMatchesWithApproval.isEmpty,
languageDoesNotMatchWithoutApproval.isEmpty,
languageDoesNotMatchWithApproval.isEmpty
) {
case (true, true, true, true):
randomServer = generalServers.randomElement()
case (true, true, true, false):
randomServer = languageDoesNotMatchWithApproval.randomElement()
case (true, true, false, _):
randomServer = languageDoesNotMatchWithoutApproval.randomElement()
case (true, false, _, _):
randomServer = languageMatchesWithApproval.randomElement()
case (false, _, _, _):
randomServer = languageMatchesWithoutApproval.randomElement()
}
return randomServer ?? servers.randomElement() ?? servers.first
}