Leonid Nikitin b24155caf6
Refactor application structure and initialize core components
I decided to rewrite the program taking into account the experience gained.
2025-06-06 14:50:16 +05:00

66 lines
1.4 KiB
Go

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
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
}