fix some translation bugs

This commit is contained in:
William Casarin
2023-04-30 22:04:33 -07:00
parent df6911f9cb
commit c74d3e4938
2 changed files with 19 additions and 15 deletions

View File

@@ -60,7 +60,10 @@ struct TranslateView: View {
func translate() {
Task {
let res = await translate_note(profiles: damus_state.profiles, privkey: damus_state.keypair.privkey, event: event, settings: damus_state.settings, note_lang: translations_model.note_language)
guard let note_language = translations_model.note_language else {
return
}
let res = await translate_note(profiles: damus_state.profiles, privkey: damus_state.keypair.privkey, event: event, settings: damus_state.settings, note_lang: note_language)
DispatchQueue.main.async {
self.translations_model.state = res
}
@@ -68,27 +71,30 @@ struct TranslateView: View {
}
func attempt_translation() {
guard should_translate(event: event, our_keypair: damus_state.keypair, settings: damus_state.settings, note_lang: self.translations_model.note_language) else {
guard should_translate(event: event, our_keypair: damus_state.keypair, settings: damus_state.settings, note_lang: self.translations_model.note_language), damus_state.settings.auto_translate else {
return
}
translate()
}
func should_transl(_ note_lang: String) -> Bool {
should_translate(event: event, our_keypair: damus_state.keypair, settings: damus_state.settings, note_lang: note_lang)
}
var body: some View {
Group {
switch self.translations_model.state {
case .havent_tried:
if damus_state.settings.auto_translate {
Text("")
} else if should_translate(event: event, our_keypair: damus_state.keypair, settings: damus_state.settings, note_lang: translations_model.note_language ?? current_language()) {
TranslateButton
} else if let note_lang = translations_model.note_language, should_transl(note_lang) {
TranslateButton
} else {
Text("")
}
case .translating:
Text("Translating...", comment: "Text to display when waiting for the translation of a note to finish processing before showing it.")
.foregroundColor(.gray)
.font(.footnote)
.padding([.top, .bottom], 10)
Text("")
case .translated(let translated):
let languageName = Locale.current.localizedString(forLanguageCode: translated.language)
TranslatedView(lang: languageName, artifacts: translated.artifacts)
@@ -118,9 +124,7 @@ struct TranslateView_Previews: PreviewProvider {
}
}
func translate_note(profiles: Profiles, privkey: String?, event: NostrEvent, settings: UserSettingsStore, note_lang: String?) async -> TranslateStatus {
let note_lang = note_lang ?? current_language()
func translate_note(profiles: Profiles, privkey: String?, event: NostrEvent, settings: UserSettingsStore, note_lang: String) async -> TranslateStatus {
// If the note language is different from our preferred languages, send a translation request.
let translator = Translator(settings)

View File

@@ -37,7 +37,7 @@ enum ImageMetaProcessState {
}
class TranslationModel: ObservableObject {
var note_language: String?
@Published var note_language: String?
@Published var state: TranslateStatus
init(state: TranslateStatus) {
@@ -283,14 +283,14 @@ func should_translate(event: NostrEvent, our_keypair: Keypair, settings: UserSet
}
// we should start translating if we have auto_translate on
return settings.auto_translate
return true
}
func should_preload_translation(event: NostrEvent, our_keypair: Keypair, current_status: TranslateStatus, settings: UserSettingsStore, note_lang: String?) -> Bool {
switch current_status {
case .havent_tried:
return should_translate(event: event, our_keypair: our_keypair, settings: settings, note_lang: note_lang)
return should_translate(event: event, our_keypair: our_keypair, settings: settings, note_lang: note_lang) && settings.auto_translate
case .translating: return false
case .translated: return false
case .not_needed: return false
@@ -377,7 +377,7 @@ func preload_event(plan: PreloadPlan, profiles: Profiles, our_keypair: Keypair,
let note_language = plan.event.note_language(our_keypair.privkey) ?? current_language()
if plan.load_translations {
if plan.load_translations, should_translate(event: plan.event, our_keypair: our_keypair, settings: settings, note_lang: note_language) {
translations = await translate_note(profiles: profiles, privkey: our_keypair.privkey, event: plan.event, settings: settings, note_lang: note_language)
}