fix: preserve uncommitted translation input
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user