Revert "Refactor auto-translations and add caching"
There are quite a few issues with this and is causing crashing
This reverts commit ae82114a33.
This commit is contained in:
@@ -16,48 +16,18 @@ struct TranslateView: View {
|
||||
@State var checkingTranslationStatus: Bool = false
|
||||
@State var currentLanguage: String = "en"
|
||||
@State var noteLanguage: String? = nil
|
||||
@State var translated_note: String? = nil
|
||||
@State var show_translated_note: Bool = false
|
||||
@State var translated_artifacts: NoteArtifacts? = nil
|
||||
@State var translatable: Bool = false
|
||||
|
||||
let preferredLanguages = Set(Locale.preferredLanguages.map { localeToLanguage($0) })
|
||||
|
||||
var TranslateButton: some View {
|
||||
Button(NSLocalizedString("Translate Note", comment: "Button to translate note from different language.")) {
|
||||
show_translated_note = true
|
||||
processTranslation()
|
||||
}
|
||||
.translate_button_style()
|
||||
}
|
||||
|
||||
func processTranslation() {
|
||||
guard noteLanguage != nil && !checkingTranslationStatus && translatable else {
|
||||
return
|
||||
}
|
||||
|
||||
checkingTranslationStatus = true
|
||||
show_translated_note = true
|
||||
|
||||
Task {
|
||||
let translationWithLanguage = await damus_state.translations.translate(event, state: damus_state)
|
||||
DispatchQueue.main.async {
|
||||
guard translationWithLanguage != nil else {
|
||||
noteLanguage = currentLanguage
|
||||
checkingTranslationStatus = false
|
||||
translatable = false
|
||||
return
|
||||
}
|
||||
|
||||
noteLanguage = translationWithLanguage!.language
|
||||
|
||||
// Render translated note.
|
||||
let translatedBlocks = event.get_blocks(content: translationWithLanguage!.translation)
|
||||
translated_artifacts = render_blocks(blocks: translatedBlocks, profiles: damus_state.profiles, privkey: damus_state.keypair.privkey)
|
||||
|
||||
checkingTranslationStatus = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Translated(lang: String, artifacts: NoteArtifacts) -> some View {
|
||||
return Group {
|
||||
@@ -70,8 +40,8 @@ struct TranslateView: View {
|
||||
}
|
||||
}
|
||||
|
||||
func CheckingStatus() -> some View {
|
||||
return Button(NSLocalizedString("Translating...", comment: "Button to indicate that the note is in the process of being translated from a different language.")) {
|
||||
func CheckingStatus(lang: String) -> some View {
|
||||
return Button(String(format: NSLocalizedString("Translating from %@...", comment: "Button to indicate that the note is in the process of being translated from a different language."), lang)) {
|
||||
show_translated_note = false
|
||||
}
|
||||
.translate_button_style()
|
||||
@@ -79,17 +49,15 @@ struct TranslateView: View {
|
||||
|
||||
func MainContent(note_lang: String) -> some View {
|
||||
return Group {
|
||||
if translatable {
|
||||
let languageName = Locale.current.localizedString(forLanguageCode: note_lang)
|
||||
if let lang = languageName, show_translated_note {
|
||||
if checkingTranslationStatus {
|
||||
CheckingStatus()
|
||||
} else if let artifacts = translated_artifacts {
|
||||
Translated(lang: lang, artifacts: artifacts)
|
||||
}
|
||||
} else {
|
||||
TranslateButton
|
||||
let languageName = Locale.current.localizedString(forLanguageCode: note_lang)
|
||||
if let lang = languageName, show_translated_note {
|
||||
if checkingTranslationStatus {
|
||||
CheckingStatus(lang: lang)
|
||||
} else if let artifacts = translated_artifacts {
|
||||
Translated(lang: lang, artifacts: artifacts)
|
||||
}
|
||||
} else {
|
||||
TranslateButton
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -103,17 +71,55 @@ struct TranslateView: View {
|
||||
}
|
||||
}
|
||||
.task {
|
||||
DispatchQueue.main.async {
|
||||
currentLanguage = damus_state.translations.targetLanguage
|
||||
noteLanguage = damus_state.translations.detectLanguage(event, state: damus_state)
|
||||
translatable = damus_state.translations.shouldTranslate(event, state: damus_state)
|
||||
|
||||
let autoTranslate = damus_state.settings.auto_translate
|
||||
if autoTranslate {
|
||||
processTranslation()
|
||||
}
|
||||
show_translated_note = autoTranslate
|
||||
guard noteLanguage == nil && !checkingTranslationStatus && damus_state.settings.can_translate(damus_state.pubkey) else {
|
||||
return
|
||||
}
|
||||
|
||||
checkingTranslationStatus = true
|
||||
|
||||
if #available(iOS 16, *) {
|
||||
currentLanguage = Locale.current.language.languageCode?.identifier ?? "en"
|
||||
} else {
|
||||
currentLanguage = Locale.current.languageCode ?? "en"
|
||||
}
|
||||
|
||||
noteLanguage = event.note_language(damus_state.keypair.privkey) ?? currentLanguage
|
||||
|
||||
guard let note_lang = noteLanguage else {
|
||||
noteLanguage = currentLanguage
|
||||
translated_note = nil
|
||||
checkingTranslationStatus = false
|
||||
return
|
||||
}
|
||||
|
||||
if !preferredLanguages.contains(note_lang) {
|
||||
do {
|
||||
// If the note language is different from our preferred languages, send a translation request.
|
||||
let translator = Translator(damus_state.settings)
|
||||
let originalContent = event.get_content(damus_state.keypair.privkey)
|
||||
translated_note = try await translator.translate(originalContent, from: note_lang, to: currentLanguage)
|
||||
|
||||
if originalContent == translated_note {
|
||||
// If the translation is the same as the original, don't bother showing it.
|
||||
noteLanguage = currentLanguage
|
||||
translated_note = nil
|
||||
}
|
||||
} catch {
|
||||
// If for whatever reason we're not able to figure out the language of the note, or translate the note, fail gracefully and do not retry. It's not the end of the world. Don't want to take down someone's translation server with an accidental denial of service attack.
|
||||
noteLanguage = currentLanguage
|
||||
translated_note = nil
|
||||
}
|
||||
}
|
||||
|
||||
if let translated = translated_note {
|
||||
// Render translated note.
|
||||
let translatedBlocks = event.get_blocks(content: translated)
|
||||
translated_artifacts = render_blocks(blocks: translatedBlocks, profiles: damus_state.profiles, privkey: damus_state.keypair.privkey)
|
||||
}
|
||||
|
||||
checkingTranslationStatus = false
|
||||
|
||||
show_translated_note = damus_state.settings.auto_translate
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user