package services
|
|
import (
|
"voicesnap/internal/config"
|
"voicesnap/internal/dock"
|
"voicesnap/internal/language"
|
"voicesnap/internal/model"
|
"voicesnap/internal/startup"
|
)
|
|
// ConfigService provides configuration read/write methods to the frontend.
|
type ConfigService struct {
|
cfg *config.Config
|
localeDetector language.SystemLocaleDetector
|
}
|
|
func NewConfigService(cfg *config.Config) *ConfigService {
|
return NewConfigServiceWithDetector(cfg, language.NewSystemDetector())
|
}
|
|
func NewConfigServiceWithDetector(cfg *config.Config, detector language.SystemLocaleDetector) *ConfigService {
|
if detector == nil {
|
detector = language.NewSystemDetector()
|
}
|
return &ConfigService{cfg: cfg, localeDetector: detector}
|
}
|
|
// GetConfig returns the current configuration.
|
func (s *ConfigService) GetConfig() *config.Config {
|
return s.cfg
|
}
|
|
// GetLanguageSettings returns the configured and effective UI language.
|
func (s *ConfigService) GetLanguageSettings() language.LanguageSettings {
|
return language.Resolve(s.cfg.LanguageMode, s.cfg.LanguageID, s.localeDetector)
|
}
|
|
// SetLanguageAuto makes the UI language follow the system language.
|
func (s *ConfigService) SetLanguageAuto() language.LanguageSettings {
|
s.cfg.LanguageMode = config.LanguageModeAuto
|
resolved := language.Resolve(s.cfg.LanguageMode, s.cfg.LanguageID, s.localeDetector)
|
s.cfg.LanguageID = resolved.EffectiveLanguageID
|
config.Save(s.cfg)
|
return language.Resolve(s.cfg.LanguageMode, s.cfg.LanguageID, s.localeDetector)
|
}
|
|
// SetLanguageManual persists a user-selected UI language.
|
func (s *ConfigService) SetLanguageManual(languageID string) language.LanguageSettings {
|
s.cfg.LanguageMode = config.LanguageModeManual
|
s.cfg.LanguageID = model.NormalizeLanguageID(languageID)
|
config.Save(s.cfg)
|
return language.Resolve(s.cfg.LanguageMode, s.cfg.LanguageID, s.localeDetector)
|
}
|
|
// SetAutoHide sets the auto-hide indicator preference.
|
func (s *ConfigService) SetAutoHide(enabled bool) {
|
s.cfg.AutoHide = enabled
|
config.Save(s.cfg)
|
}
|
|
// GetAutoHide returns the auto-hide preference.
|
func (s *ConfigService) GetAutoHide() bool {
|
return s.cfg.AutoHide
|
}
|
|
// SetSoundFeedback sets the sound feedback preference.
|
func (s *ConfigService) SetSoundFeedback(enabled bool) {
|
s.cfg.SoundFeedback = enabled
|
config.Save(s.cfg)
|
}
|
|
// GetSoundFeedback returns the sound feedback preference.
|
func (s *ConfigService) GetSoundFeedback() bool {
|
return s.cfg.SoundFeedback
|
}
|
|
// SetHotkeyMode sets the voice input interaction mode.
|
func (s *ConfigService) SetHotkeyMode(mode string) {
|
s.cfg.HotkeyMode = config.NormalizeHotkeyMode(mode)
|
config.Save(s.cfg)
|
}
|
|
// GetHotkeyMode returns the voice input interaction mode.
|
func (s *ConfigService) GetHotkeyMode() string {
|
s.cfg.HotkeyMode = config.NormalizeHotkeyMode(s.cfg.HotkeyMode)
|
return s.cfg.HotkeyMode
|
}
|
|
// SetCopyToClipboard sets whether recognized text remains in the clipboard after input.
|
func (s *ConfigService) SetCopyToClipboard(enabled bool) {
|
s.cfg.CopyToClipboard = enabled
|
config.Save(s.cfg)
|
}
|
|
// GetCopyToClipboard returns whether recognized text remains in the clipboard after input.
|
func (s *ConfigService) GetCopyToClipboard() bool {
|
return s.cfg.CopyToClipboard
|
}
|
|
// SetHideDockIcon sets whether the app should hide its Dock icon on macOS.
|
func (s *ConfigService) SetHideDockIcon(enabled bool) {
|
s.cfg.HideDockIcon = enabled
|
config.Save(s.cfg)
|
dock.SetHidden(enabled)
|
}
|
|
// GetHideDockIcon returns whether the Dock icon should be hidden.
|
func (s *ConfigService) GetHideDockIcon() bool {
|
return s.cfg.HideDockIcon
|
}
|
|
// IsStartupEnabled returns whether the app is set to start at login.
|
func (s *ConfigService) IsStartupEnabled() bool {
|
return startup.IsEnabled()
|
}
|
|
// SetStartupEnabled enables or disables start at login.
|
func (s *ConfigService) SetStartupEnabled(enabled bool) error {
|
return startup.SetEnabled(enabled)
|
}
|