From fe12019370bd343a436055bb80b5c17e66648416 Mon Sep 17 00:00:00 2001 From: Marcus Kida Date: Wed, 8 Feb 2023 23:41:49 +0100 Subject: [PATCH] Change random server picking logic to require "general" category, prefer no approval and own language code (#929) --- .../MastodonPickServerViewModel.swift | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewModel.swift b/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewModel.swift index 785c49f34..ced8b26b3 100644 --- a/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewModel.swift +++ b/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewModel.swift @@ -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 }