From f0406e67b575b153255802f47749208f6f51f785 Mon Sep 17 00:00:00 2001 From: Prakash Joshi Pax <101010368+Beingpax@users.noreply.github.com> Date: Thu, 27 Mar 2025 08:23:30 +0545 Subject: [PATCH] ix multiple paste operations by adding cooldown mechanism to keyboard shortcuts --- VoiceInk/HotkeyManager.swift | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/VoiceInk/HotkeyManager.swift b/VoiceInk/HotkeyManager.swift index d122ca1..28bc4b8 100644 --- a/VoiceInk/HotkeyManager.swift +++ b/VoiceInk/HotkeyManager.swift @@ -49,6 +49,10 @@ class HotkeyManager: ObservableObject { private var isLockedRecording = false // For toggle mode after double-press private let doublePressThreshold = 0.3 // 300ms for faster double-press detection private let briefPressThreshold = 1.0 // 1000ms threshold for brief press + + // Add cooldown management + private var lastShortcutTriggerTime: Date? + private let shortcutCooldownInterval: TimeInterval = 0.5 // 500ms cooldown enum PushToTalkKey: String, CaseIterable { case rightOption = "rightOption" @@ -332,14 +336,29 @@ class HotkeyManager: ObservableObject { } } + private func setupShortcutHandler() { KeyboardShortcuts.onKeyUp(for: .toggleMiniRecorder) { [weak self] in Task { @MainActor in - await self?.whisperState.handleToggleMiniRecorder() + await self?.handleShortcutTriggered() } } } + private func handleShortcutTriggered() async { + // Check cooldown + if let lastTrigger = lastShortcutTriggerTime, + Date().timeIntervalSince(lastTrigger) < shortcutCooldownInterval { + return // Still in cooldown period + } + + // Update last trigger time + lastShortcutTriggerTime = Date() + + // Handle the shortcut + await whisperState.handleToggleMiniRecorder() + } + deinit { visibilityTask?.cancel() Task { @MainActor in @@ -348,4 +367,4 @@ class HotkeyManager: ObservableObject { removeEnhancementShortcut() } } -} \ No newline at end of file +}