Ariver
2026-06-03 9a85354d8b41e05ba8729cd8f44592291de9117a
privatevoice.src/internal/config/config.go
@@ -9,8 +9,10 @@
)
const (
   HotkeyModeTap  = "tap"
   HotkeyModeHold = "hold"
   HotkeyModeTap      = "tap"
   HotkeyModeHold     = "hold"
   LanguageModeAuto   = "auto"
   LanguageModeManual = "manual"
)
// Config holds the application configuration, compatible with the WPF version's config.json.
@@ -25,6 +27,8 @@
   IndicatorX               int    `json:"IndicatorX,omitempty"`
   IndicatorY               int    `json:"IndicatorY,omitempty"`
   SelectedModelID          string `json:"SelectedModelID,omitempty"`
   LanguageMode             string `json:"LanguageMode,omitempty"`
   LanguageID               string `json:"LanguageID,omitempty"`
   ModelDownloadUrl         string `json:"ModelDownloadUrl"`
   FallbackModelDownloadUrl string `json:"FallbackModelDownloadUrl"`
}
@@ -39,6 +43,8 @@
      HideDockIcon:             true,
      CopyToClipboard:          true,
      SelectedModelID:          model.DefaultModelID,
      LanguageMode:             LanguageModeAuto,
      LanguageID:               model.DefaultLanguageID,
      ModelDownloadUrl:         "http://www.maikami.com/voicesnap/sensevoice.zip",
      FallbackModelDownloadUrl: "https://modelscope.cn/models/sherpa-onnx/sherpa-onnx-sense-voice-zh-en-ja-ko-yue/resolve/master/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8-2024-07-17.tar.bz2",
   }
@@ -66,6 +72,12 @@
      return nil, err
   }
   cfg.HotkeyMode = NormalizeHotkeyMode(cfg.HotkeyMode)
   cfg.LanguageMode = NormalizeLanguageMode(cfg.LanguageMode)
   languageID := cfg.LanguageID
   cfg.LanguageID = model.NormalizeLanguageID(cfg.LanguageID)
   if languageID != "" && languageID != cfg.LanguageID {
      logger.Info("Unknown LanguageID %q, falling back to %q", languageID, cfg.LanguageID)
   }
   selectedModelID := cfg.SelectedModelID
   cfg.SelectedModelID = model.NormalizeModelID(cfg.SelectedModelID)
   if selectedModelID != "" && selectedModelID != cfg.SelectedModelID {
@@ -74,6 +86,15 @@
   return cfg, nil
}
func NormalizeLanguageMode(mode string) string {
   switch mode {
   case LanguageModeAuto, LanguageModeManual:
      return mode
   default:
      return LanguageModeAuto
   }
}
func NormalizeHotkeyMode(mode string) string {
   switch mode {
   case HotkeyModeTap, HotkeyModeHold: