fix: preserve uncommitted translation input

This commit is contained in:
2026-10-25 15:44:44 +01:00
parent 47912d237c
commit ef979d2838
5 changed files with 96 additions and 5 deletions
+13 -1
View File
@@ -32,6 +32,14 @@ final class TranslationController: NSViewController {
private func languageName(_ code: String) -> String { Self.languageName(code) }
private var usesMyMemory: Bool
private var textToTranslate: String?
struct Draft {
let input: String
let textToTranslate: String?
}
private var committed = false
var draft: Draft? {
committed ? nil : Draft(input: input?() ?? "", textToTranslate: textToTranslate)
}
private let sourcePreview = NSTextField(wrappingLabelWithString: "")
private let output = NSTextView()
private let settingsButton = NSButton(title: "Open Translate Settings", target: nil, action: nil)
@@ -60,13 +68,15 @@ final class TranslationController: NSViewController {
openAI: @escaping @MainActor (String, String, String, String, String) async throws -> String = {
try await TranslationAPI.translate($0, apiKey: $3, sourceLanguage: $1, targetLanguage: $2, context: $4)
},
pasteboard: NSPasteboard = .general
pasteboard: NSPasteboard = .general,
draft: Draft? = nil
) {
self.defaults = defaults
self.credentialsStore = credentials
self.myMemory = myMemory
self.openAI = openAI
self.pasteboard = pasteboard
textToTranslate = draft?.textToTranslate
usesMyMemory = defaults.string(forKey: "translationProvider") != "openai"
sourceLanguage = defaults.string(forKey: "translationSourceLanguage")
.flatMap { Self.languages.contains($0) ? $0 : nil } ?? "en"
@@ -285,6 +295,7 @@ final class TranslationController: NSViewController {
}
func inputChanged() {
committed = false
cancelRequest()
output.string = ""
outputSecondaryRange = nil
@@ -354,6 +365,7 @@ final class TranslationController: NSViewController {
}
pasteboard.clearContents()
if pasteboard.setString(output.string, forType: .string) {
committed = true
dismiss?()
} else {
setStatus("Could not copy the translation. Try again.", isError: true)