From ccf4d6184c036ddd7ee88d1d618e3cafbe50d606 Mon Sep 17 00:00:00 2001 From: jahruz67 Date: Thu, 14 May 2026 19:40:09 -0700 Subject: [PATCH] Harden config storage and fix concurrency/install checks --- app.go | 8 +++++--- internal/config/config.go | 4 ++-- internal/services/whisper/whisper.go | 8 ++++++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/app.go b/app.go index c31cec4..344b9fc 100644 --- a/app.go +++ b/app.go @@ -144,14 +144,16 @@ func (a *App) Quit() { wailsruntime.Quit(a.ctx) } -var lastToggle time.Time +var lastToggleUnixNano int64 func (a *App) ToggleRecording() { // Debounce toggle calls to prevent rapid firing from double-binds or Wayland glitches - if time.Since(lastToggle) < 500*time.Millisecond { + now := time.Now().UnixNano() + last := atomic.LoadInt64(&lastToggleUnixNano) + if last != 0 && time.Duration(now-last) < 500*time.Millisecond { return } - lastToggle = time.Now() + atomic.StoreInt64(&lastToggleUnixNano, now) if atomic.LoadInt32(&a.recording) == 1 { a.StopRecording() diff --git a/internal/config/config.go b/internal/config/config.go index ab4e394..47770e9 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -89,7 +89,7 @@ func Save(c *Config, configPath string) error { // Ensure the directory exists dir := filepath.Dir(configPath) - if err := os.MkdirAll(dir, 0755); err != nil { + if err := os.MkdirAll(dir, 0700); err != nil { return err } @@ -98,7 +98,7 @@ func Save(c *Config, configPath string) error { return err } - return os.WriteFile(configPath, data, 0644) + return os.WriteFile(configPath, data, 0600) } // GetConfigPath returns the default configuration file path. diff --git a/internal/services/whisper/whisper.go b/internal/services/whisper/whisper.go index ce1219c..4f10bd3 100644 --- a/internal/services/whisper/whisper.go +++ b/internal/services/whisper/whisper.go @@ -74,7 +74,12 @@ func (m *Manager) IsInstalled() bool { return false } - modelPath := filepath.Join(m.installDir, Models[info.Model].Filename) + modelInfo, ok := Models[info.Model] + if !ok || modelInfo.Filename == "" { + return false + } + + modelPath := filepath.Join(m.installDir, modelInfo.Filename) if _, err := os.Stat(modelPath); os.IsNotExist(err) { return false } @@ -445,4 +450,3 @@ func downloadFile(url, dest string, progress chan<- DownloadProgress) error { return nil } -