Implement translation language check (IOS-271)

This commit is contained in:
Marcus Kida 2024-06-25 10:41:03 +02:00
parent 7f8587913f
commit daaf1b330e
No known key found for this signature in database
GPG Key ID: 19FF64E08013CA40
3 changed files with 21 additions and 19 deletions

View File

@ -48,13 +48,6 @@ extension Instance {
public var canFollowTags: Bool {
version?.majorServerVersion(greaterThanOrEquals: 4) ?? false // following Tags is support beginning with Mastodon v4.0.0
}
public var isTranslationEnabled: Bool {
if let configuration = configurationV2 {
return configuration.translation?.enabled == true
}
return false
}
}
extension String {

View File

@ -6,8 +6,18 @@ import MastodonSDK
public struct MastodonAuthentication: Codable, Hashable, UserIdentifier {
public enum InstanceConfiguration: Codable, Hashable {
case v1(Mastodon.Entity.Instance, TranslationLanguages)
case v1(Mastodon.Entity.Instance)
case v2(Mastodon.Entity.V2.Instance, TranslationLanguages)
public func canTranslateFrom(_ sourceLocale: String, to targetLanguage: String) -> Bool {
switch self {
case .v1:
return false
case let .v2(instance, translationLanguages):
guard instance.configuration?.translation?.enabled == true else { return false }
return translationLanguages[sourceLocale]?.contains(targetLanguage) == true
}
}
}
public typealias ID = UUID
@ -127,13 +137,7 @@ public struct MastodonAuthentication: Codable, Hashable, UserIdentifier {
}
func updating(instanceV1 instance: Mastodon.Entity.Instance) -> Self {
guard
let instanceConfiguration = self.instanceConfiguration,
case let InstanceConfiguration.v1(_, translationLanguages) = instanceConfiguration
else {
return copy(instanceConfiguration: .v1(instance, [:]))
}
return copy(instanceConfiguration: .v1(instance, translationLanguages))
return copy(instanceConfiguration: .v1(instance))
}
func updating(instanceV2 instance: Mastodon.Entity.V2.Instance) -> Self {
@ -148,8 +152,8 @@ public struct MastodonAuthentication: Codable, Hashable, UserIdentifier {
func updating(translationLanguages: TranslationLanguages) -> Self {
switch self.instanceConfiguration {
case .v1(let instance, _):
return copy(instanceConfiguration: .v1(instance, translationLanguages))
case .v1(let instance):
return copy(instanceConfiguration: .v1(instance))
case .v2(let instance, _):
return copy(instanceConfiguration: .v2(instance, translationLanguages))
case .none:

View File

@ -696,8 +696,13 @@ extension StatusView.ViewModel {
}
let authentication = authContext.mastodonAuthenticationBox.authentication
let instance = authentication.instance(in: context.managedObjectContext)
let isTranslationEnabled = instance?.isTranslationEnabled ?? false
let isTranslationEnabled: Bool = {
guard let language, let targetLanguage = Bundle.main.preferredLocalizations.first else { return false }
return authentication.instanceConfiguration?.canTranslateFrom(
language,
to: targetLanguage
) ?? false
}()
authorView.menuButton.menu = UIMenu(children: [
UIDeferredMenuElement.uncached({ menuElement in