Ariver
2026-06-28 fc6d61e41b1b0e0686d1346694445dc119b97872
privatevoice.src/internal/config/config.go
@@ -9,8 +9,12 @@
)
const (
   HotkeyModeTap  = "tap"
   HotkeyModeHold = "hold"
   HotkeyModeTap            = "tap"
   HotkeyModeHold           = "hold"
   LanguageModeAuto         = "auto"
   LanguageModeManual       = "manual"
   ModelSelectionModeAuto   = "auto"
   ModelSelectionModeManual = "manual"
)
// Config holds the application configuration, compatible with the WPF version's config.json.
@@ -25,6 +29,9 @@
   IndicatorX               int    `json:"IndicatorX,omitempty"`
   IndicatorY               int    `json:"IndicatorY,omitempty"`
   SelectedModelID          string `json:"SelectedModelID,omitempty"`
   ModelSelectionMode       string `json:"ModelSelectionMode,omitempty"`
   LanguageMode             string `json:"LanguageMode,omitempty"`
   LanguageID               string `json:"LanguageID,omitempty"`
   ModelDownloadUrl         string `json:"ModelDownloadUrl"`
   FallbackModelDownloadUrl string `json:"FallbackModelDownloadUrl"`
}
@@ -39,6 +46,9 @@
      HideDockIcon:             true,
      CopyToClipboard:          true,
      SelectedModelID:          model.DefaultModelID,
      ModelSelectionMode:       ModelSelectionModeAuto,
      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 +76,13 @@
      return nil, err
   }
   cfg.HotkeyMode = NormalizeHotkeyMode(cfg.HotkeyMode)
   cfg.LanguageMode = NormalizeLanguageMode(cfg.LanguageMode)
   cfg.ModelSelectionMode = NormalizeModelSelectionMode(cfg.ModelSelectionMode)
   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 +91,24 @@
   return cfg, nil
}
func NormalizeLanguageMode(mode string) string {
   switch mode {
   case LanguageModeAuto, LanguageModeManual:
      return mode
   default:
      return LanguageModeAuto
   }
}
func NormalizeModelSelectionMode(mode string) string {
   switch mode {
   case ModelSelectionModeAuto, ModelSelectionModeManual:
      return mode
   default:
      return ModelSelectionModeAuto
   }
}
func NormalizeHotkeyMode(mode string) string {
   switch mode {
   case HotkeyModeTap, HotkeyModeHold: