From c64dc598974551d262f7180affa909962b0f1fc0 Mon Sep 17 00:00:00 2001 From: oliverhnat Date: Wed, 10 Dec 2025 12:12:15 +0100 Subject: [PATCH] fix(notes): debounce transcription longer, max 1 line title, add multiple lines in transcription --- WorterBuch/FieldEditorView.swift | 31 +++++++++++++------------- WorterBuch/HandwritingRecognizer.swift | 2 +- WorterBuch/NotesListView.swift | 6 ++--- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/WorterBuch/FieldEditorView.swift b/WorterBuch/FieldEditorView.swift index 529907c..5977583 100644 --- a/WorterBuch/FieldEditorView.swift +++ b/WorterBuch/FieldEditorView.swift @@ -35,6 +35,7 @@ struct FieldEditorView: View { @State private var viewAppeared = false @State private var showingTagPicker = false @State private var newTagName = "" + @State private var recognitionWorkItem: DispatchWorkItem? var body: some View { NavigationView { @@ -174,31 +175,31 @@ struct FieldEditorView: View { } private func recognizeHandwriting(_ drawing: PKDrawing) { - print("=== recognizeHandwriting called ===") - print("Drawing bounds: \(drawing.bounds)") - print("Drawing is empty: \(drawing.bounds.isEmpty)") - guard !drawing.bounds.isEmpty else { - print("Drawing bounds are empty, skipping recognition") return } - print("Starting recognition...") - isRecognizing = true - Task { - if let recognizedText = await HandwritingRecognizer.recognizeTextAsync(from: drawing) { - print("Recognition successful: \(recognizedText)") - await MainActor.run { + // Cancel any pending recognition + recognitionWorkItem?.cancel() + + // Create new work item with debounce + let workItem = DispatchWorkItem { [drawing] in + Task { @MainActor in + isRecognizing = true + + if let recognizedText = await HandwritingRecognizer.recognizeTextAsync(from: drawing) { text = recognizedText isRecognizing = false - } - } else { - print("Recognition returned nil") - await MainActor.run { + } else { isRecognizing = false } } } + + recognitionWorkItem = workItem + + // Execute after 3 seconds delay (same as NotesListView) + DispatchQueue.main.asyncAfter(deadline: .now() + 3.0, execute: workItem) } } diff --git a/WorterBuch/HandwritingRecognizer.swift b/WorterBuch/HandwritingRecognizer.swift index 49f9a27..af93f3d 100644 --- a/WorterBuch/HandwritingRecognizer.swift +++ b/WorterBuch/HandwritingRecognizer.swift @@ -87,7 +87,7 @@ class HandwritingRecognizer { print("Recognized strings: \(recognizedStrings)") - let recognizedText = recognizedStrings.joined(separator: " ") + let recognizedText = recognizedStrings.joined(separator: "\n") completion(recognizedText.isEmpty ? nil : recognizedText) } diff --git a/WorterBuch/NotesListView.swift b/WorterBuch/NotesListView.swift index d93082c..8b43044 100644 --- a/WorterBuch/NotesListView.swift +++ b/WorterBuch/NotesListView.swift @@ -159,7 +159,7 @@ struct NoteRowView: View { VStack(alignment: .leading, spacing: 4) { Text(note.title) .font(.body) - .lineLimit(2) + .lineLimit(1) if note.timestamp != nil { Text(timeAgo) @@ -379,7 +379,7 @@ struct NoteEditorContentOnly: View { recognitionWorkItem = workItem - // Execute after 800ms delay (adjust as needed) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.8, execute: workItem) + // Execute after 3 seconds delay + DispatchQueue.main.asyncAfter(deadline: .now() + 3.0, execute: workItem) } }