I decided to rewrite the program taking into account the experience gained.
66 lines
1.4 KiB
Go
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
|
|
}
|