From 987f2591300a5aa7e7c0a5f4a2500beb6e6f154a Mon Sep 17 00:00:00 2001 From: Thomas Ricouard Date: Sun, 22 Jan 2023 09:31:29 +0100 Subject: [PATCH] Add a translate entry on the status context menu Fix #258 --- .../Sources/Status/Row/StatusRowContextMenu.swift | 12 ++++++++++++ .../Status/Sources/Status/Row/StatusRowView.swift | 11 ++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Packages/Status/Sources/Status/Row/StatusRowContextMenu.swift b/Packages/Status/Sources/Status/Row/StatusRowContextMenu.swift index 4f109ffb..ccdd29ed 100644 --- a/Packages/Status/Sources/Status/Row/StatusRowContextMenu.swift +++ b/Packages/Status/Sources/Status/Row/StatusRowContextMenu.swift @@ -3,6 +3,7 @@ import Foundation import SwiftUI struct StatusRowContextMenu: View { + @EnvironmentObject private var preferences: UserPreferences @EnvironmentObject private var account: CurrentAccount @EnvironmentObject private var routerPath: RouterPath @@ -74,6 +75,17 @@ struct StatusRowContextMenu: View { } label: { Label("status.action.copy-text", systemImage: "doc.on.doc") } + + if let lang = preferences.serverPreferences?.postLanguage ?? Locale.current.language.languageCode?.identifier, + viewModel.status.language != lang { + Button { + Task { + await viewModel.translate(userLang: lang) + } + } label: { + Label("status.action.translate", systemImage: "captions.bubble") + } + } if account.account?.id == viewModel.status.account.id { Section("status.action.section.your-post") { diff --git a/Packages/Status/Sources/Status/Row/StatusRowView.swift b/Packages/Status/Sources/Status/Row/StatusRowView.swift index 3a48f161..86ef664d 100644 --- a/Packages/Status/Sources/Status/Row/StatusRowView.swift +++ b/Packages/Status/Sources/Status/Row/StatusRowView.swift @@ -235,10 +235,8 @@ public struct StatusRowView: View { }) Spacer() } - - if preferences.showTranslateButton { - makeTranslateView(status: status) - } + + makeTranslateView(status: status) if let poll = status.poll { StatusPollView(poll: poll, status: status) @@ -288,6 +286,7 @@ public struct StatusRowView: View { @ViewBuilder private func makeTranslateView(status: AnyStatus) -> some View { if let userLang = preferences.serverPreferences?.postLanguage, + preferences.showTranslateButton, status.language != nil, userLang != status.language, !status.content.asRawText.isEmpty, @@ -304,7 +303,9 @@ public struct StatusRowView: View { Text("status.action.translate") } } - } else if let translation = viewModel.translation { + } + + if let translation = viewModel.translation { GroupBox { VStack(alignment: .leading, spacing: 4) { Text(translation)