package setting import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/lang" "golang.org/x/text/language" ) type SettingContract interface { GetLanguages() []Lang GetCurrentLangOrDefaultLang() (currentLang Lang, isDefault bool) SetLang(language Lang) error GetDirectoryForSaving() string SetDirectoryForSaving(path string) GetFFmpegPath() string SetFFmpegPath(path string) GetFFprobePath() string SetFFprobePath(path string) GetFFplayPath() string SetFFplayPath(path string) } type setting struct { fyneApp fyne.App } func NewSetting(fyneApp fyne.App) SettingContract { return &setting{ fyneApp: fyneApp, } } func (s *setting) GetLanguages() []Lang { items := []Lang{} for _, item := range supportedLanguages { items = append(items, item) } return items } func (s *setting) GetCurrentLangOrDefaultLang() (currentLang Lang, isDefault bool) { languageCode := s.fyneApp.Preferences().String("language") if languageCode == "" { languageTag, err := language.Parse(lang.SystemLocale().LanguageString()) if err != nil { return currentLang, true } base, _ := languageTag.Base() languageCode = base.String() } if currentLang, ok := supportedLanguages[languageCode]; ok { return currentLang, false } return defaultLang(), true } func (s *setting) SetLang(language Lang) error { err := ChangeLang(language) if err != nil { return err } s.fyneApp.Preferences().SetString("language", language.Code) return nil } func (s *setting) GetDirectoryForSaving() string { return s.fyneApp.Preferences().String("directoryForSaving") } func (s *setting) SetDirectoryForSaving(path string) { s.fyneApp.Preferences().SetString("directoryForSaving", path) }