Ariver
2026-07-12 24f551a39eae849d891da26cc91f90d354e3a2db
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
123
124
125
126
127
128
129
130
131
132
133
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
}
 
// SetAutoPasteExperiment enables the isolated App Store automatic paste experiment.
func (s *ConfigService) SetAutoPasteExperiment(enabled bool) {
    s.cfg.AutoPasteExperiment = enabled
    config.Save(s.cfg)
}
 
// GetAutoPasteExperiment returns whether the isolated automatic paste experiment is enabled.
func (s *ConfigService) GetAutoPasteExperiment() bool {
    return s.cfg.AutoPasteExperiment
}
 
// 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)
}