feat: refactor transcription handling for Linux and non-Linux environments

This commit is contained in:
jahruz67
2026-05-20 15:29:09 -07:00
parent 910877d35e
commit 5ab514abdd
3 changed files with 67 additions and 35 deletions
+1 -35
View File
@@ -374,32 +374,7 @@ func (a *App) processRecording(recordingPath string) {
wailsruntime.EventsEmit(a.ctx, "history:updated")
}
if len(refinedText) < 50 {
// Type short text directly to avoid clipboard interference
robotgo.TypeStr(refinedText)
} else {
// Save old clipboard
oldClip, clipErr := wailsruntime.ClipboardGetText(a.ctx)
// Copy to clipboard
wailsruntime.ClipboardSetText(a.ctx, refinedText)
// Paste
a.pasteText()
// Restore old clipboard after a short delay, but ONLY if the user
// hasn't manually copied something else or another burst hasn't finished.
if clipErr == nil && oldClip != "" {
go func() {
time.Sleep(1000 * time.Millisecond)
current, _ := wailsruntime.ClipboardGetText(a.ctx)
if current == refinedText {
wailsruntime.ClipboardSetText(a.ctx, oldClip)
logger.Info("Clipboard history restored")
}
}()
}
}
a.insertTranscription(refinedText)
// Clean up the recording file
if removeErr := os.Remove(recordingPath); removeErr != nil {
@@ -415,15 +390,6 @@ func (a *App) processRecording(recordingPath string) {
}
}
// pasteText simulates Ctrl+V to paste from clipboard
func (a *App) pasteText() {
// Give a substantial delay for Linux GTK clipboard sync
time.Sleep(200 * time.Millisecond)
// Simulate Ctrl+V using modern robotgo API
robotgo.KeyTap("v", "ctrl")
}
// GetSettings returns the current configuration
func (a *App) GetSettings() map[string]interface{} {
conf := make(map[string]interface{})
+18
View File
@@ -0,0 +1,18 @@
//go:build linux
package main
import (
"unicode/utf8"
"wis-free-v3/internal/logger"
"github.com/go-vgo/robotgo"
)
func (a *App) insertTranscription(text string) {
// Avoid synthetic Ctrl+V on Linux; desktop environments can interpret it
// together with lingering shortcut modifiers and open global UI instead.
logger.Info("Typing transcription directly on Linux (%d chars)", utf8.RuneCountInString(text))
robotgo.TypeStr(text)
}
+48
View File
@@ -0,0 +1,48 @@
//go:build !linux
package main
import (
"time"
"wis-free-v3/internal/logger"
"github.com/go-vgo/robotgo"
wailsruntime "github.com/wailsapp/wails/v2/pkg/runtime"
)
func (a *App) insertTranscription(text string) {
if len(text) < 50 {
// Type short text directly to avoid clipboard interference
robotgo.TypeStr(text)
return
}
// Save old clipboard
oldClip, clipErr := wailsruntime.ClipboardGetText(a.ctx)
// Copy to clipboard
wailsruntime.ClipboardSetText(a.ctx, text)
// Paste
a.pasteText()
// Restore old clipboard after a short delay, but ONLY if the user
// hasn't manually copied something else or another burst hasn't finished.
if clipErr == nil && oldClip != "" {
go func() {
time.Sleep(1000 * time.Millisecond)
current, _ := wailsruntime.ClipboardGetText(a.ctx)
if current == text {
wailsruntime.ClipboardSetText(a.ctx, oldClip)
logger.Info("Clipboard history restored")
}
}()
}
}
// pasteText simulates Ctrl+V to paste from clipboard
func (a *App) pasteText() {
time.Sleep(200 * time.Millisecond)
robotgo.KeyTap("v", "ctrl")
}