From 396daf0755e311291d150bd16805848485446c23 Mon Sep 17 00:00:00 2001 From: Beingpax Date: Fri, 25 Jul 2025 18:49:31 +0545 Subject: [PATCH] Add menu bar copy last transcription --- .../Services/LastTranscriptionService.swift | 48 +++++++++++++++++++ VoiceInk/Views/MenuBarView.swift | 4 ++ 2 files changed, 52 insertions(+) create mode 100644 VoiceInk/Services/LastTranscriptionService.swift diff --git a/VoiceInk/Services/LastTranscriptionService.swift b/VoiceInk/Services/LastTranscriptionService.swift new file mode 100644 index 0000000..5193923 --- /dev/null +++ b/VoiceInk/Services/LastTranscriptionService.swift @@ -0,0 +1,48 @@ +import Foundation +import SwiftData + +class LastTranscriptionService: ObservableObject { + + static func getLastTranscription(from modelContext: ModelContext) -> Transcription? { + var descriptor = FetchDescriptor( + sortBy: [SortDescriptor(\.timestamp, order: .reverse)] + ) + descriptor.fetchLimit = 1 + + do { + let transcriptions = try modelContext.fetch(descriptor) + return transcriptions.first + } catch { + print("Error fetching last transcription: \(error)") + return nil + } + } + + static func copyLastTranscription(from modelContext: ModelContext) { + guard let lastTranscription = getLastTranscription(from: modelContext) else { + Task { @MainActor in + NotificationManager.shared.showNotification( + title: "No transcription available", + type: .error + ) + } + return + } + + let success = ClipboardManager.copyToClipboard(lastTranscription.text) + + Task { @MainActor in + if success { + NotificationManager.shared.showNotification( + title: "Last transcription copied", + type: .success + ) + } else { + NotificationManager.shared.showNotification( + title: "Failed to copy transcription", + type: .error + ) + } + } + } +} \ No newline at end of file diff --git a/VoiceInk/Views/MenuBarView.swift b/VoiceInk/Views/MenuBarView.swift index f06ed7d..b3856e7 100644 --- a/VoiceInk/Views/MenuBarView.swift +++ b/VoiceInk/Views/MenuBarView.swift @@ -159,6 +159,10 @@ struct MenuBarView: View { Divider() + Button("Copy Last Transcription") { + LastTranscriptionService.copyLastTranscription(from: whisperState.modelContext) + } + Button("History") { menuBarManager.openMainWindowAndNavigate(to: "History") }