Introduce a new `MainSettings` view for managing application settings, including language and theme selection. Implement theme management methods in the `setting` package to handle theme initialization, retrieval, and updates.
85 lines
1.8 KiB
Go
85 lines
1.8 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
|
|
|
|
GetDirectoryForSaving() string
|
|
SetDirectoryForSaving(path string)
|
|
|
|
GetFFmpegPath() string
|
|
SetFFmpegPath(path string)
|
|
|
|
GetFFprobePath() string
|
|
SetFFprobePath(path string)
|
|
|
|
GetFFplayPath() string
|
|
SetFFplayPath(path string)
|
|
|
|
ThemeInit()
|
|
GetThemes() map[string]ThemeInfoContract
|
|
GetTheme() ThemeInfoContract
|
|
SetTheme(themeInfo ThemeInfoContract)
|
|
}
|
|
|
|
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)
|
|
}
|