mirror of
https://github.com/jahruz67/wisp-open.git
synced 2026-08-08 18:14:08 +00:00
feat: refactor transcription handling for Linux and non-Linux environments
This commit is contained in:
@@ -374,32 +374,7 @@ func (a *App) processRecording(recordingPath string) {
|
|||||||
wailsruntime.EventsEmit(a.ctx, "history:updated")
|
wailsruntime.EventsEmit(a.ctx, "history:updated")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(refinedText) < 50 {
|
a.insertTranscription(refinedText)
|
||||||
// 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")
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clean up the recording file
|
// Clean up the recording file
|
||||||
if removeErr := os.Remove(recordingPath); removeErr != nil {
|
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
|
// GetSettings returns the current configuration
|
||||||
func (a *App) GetSettings() map[string]interface{} {
|
func (a *App) GetSettings() map[string]interface{} {
|
||||||
conf := make(map[string]interface{})
|
conf := make(map[string]interface{})
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
@@ -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")
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user