Ariver
2026-06-03 67c62ef3ae5e82cbc2e8718f0d836fe1678e1368
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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
    s.cfg.ModelSelectionMode = config.ModelSelectionModeAuto
    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)
    s.cfg.ModelSelectionMode = config.ModelSelectionModeAuto
    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)
}