v/GTT
1
0
mirror of https://github.com/eeeXun/GTT.git synced 2025-05-16 07:40:44 -07:00
GTT/config.go
eeeXun c5cdbcb99a refactor: move module color to style
- rename control.go to style.go
- remove windowStyle struct, don't need it
- rename global variable style to uiStyle
2023-02-14 15:25:40 +08:00

145 lines
4.2 KiB
Go

package main
import (
"fmt"
"os"
"github.com/eeeXun/gtt/internal/style"
"github.com/eeeXun/gtt/internal/translate"
config "github.com/spf13/viper"
)
var (
// settings
uiStyle = style.NewStyle()
hideBelow bool
)
// Search XDG_CONFIG_HOME or $HOME/.config
func configInit() {
var (
defaultConfigPath string
defaultConfig = map[string]interface{}{
"transparent": false,
"theme": "Gruvbox",
"source.borderColor": "red",
"destination.borderColor": "blue",
"source.language.apertiumtranslate": "English",
"destination.language.apertiumtranslate": "English",
"source.language.argostranslate": "English",
"destination.language.argostranslate": "English",
"source.language.googletranslate": "English",
"destination.language.googletranslate": "English",
"hide_below": false,
"translator": "ArgosTranslate",
}
)
config.SetConfigName("gtt")
config.SetConfigType("yaml")
if len(os.Getenv("XDG_CONFIG_HOME")) > 0 {
defaultConfigPath = os.Getenv("XDG_CONFIG_HOME") + "/gtt"
config.AddConfigPath(defaultConfigPath)
} else {
defaultConfigPath = os.Getenv("HOME") + "/.config/gtt"
}
config.AddConfigPath("$HOME/.config/gtt")
// Create config file if not exists
// Otherwise check if config value is missing
if err := config.ReadInConfig(); err != nil {
for key, value := range defaultConfig {
config.Set(key, value)
}
if _, err = os.Stat(defaultConfigPath); os.IsNotExist(err) {
os.MkdirAll(defaultConfigPath, os.ModePerm)
}
config.SafeWriteConfig()
} else {
missing := false
for key, value := range defaultConfig {
if config.Get(key) == nil {
config.Set(key, value)
missing = true
}
}
if missing {
config.WriteConfig()
}
}
// setup
for _, name := range translate.AllTranslator {
translators[name] = translate.NewTranslator(name)
translators[name].SetSrcLang(
config.GetString(fmt.Sprintf("source.language.%s", name)))
translators[name].SetDstLang(
config.GetString(fmt.Sprintf("destination.language.%s", name)))
}
translator = translators[config.GetString("translator")]
hideBelow = config.GetBool("hide_below")
uiStyle.Theme = config.GetString("theme")
uiStyle.Transparent = config.GetBool("transparent")
uiStyle.SetSrcBorderColor(config.GetString("source.borderColor")).
SetDstBorderColor(config.GetString("destination.borderColor"))
// set argument language
if len(*srcLangArg) > 0 {
translator.SetSrcLang(*srcLangArg)
}
if len(*dstLangArg) > 0 {
translator.SetDstLang(*dstLangArg)
}
}
// Check if need to modify config file when quit program
func updateConfig() {
changed := false
// Source language is not passed in argument
if len(*srcLangArg) == 0 {
for t_str, t := range translators {
if config.GetString(fmt.Sprintf("source.language.%s", t_str)) != t.GetSrcLang() {
changed = true
config.Set(fmt.Sprintf("source.language.%s", t_str), t.GetSrcLang())
}
}
}
// Destination language is not passed in argument
if len(*dstLangArg) == 0 {
for t_str, t := range translators {
if config.GetString(fmt.Sprintf("destination.language.%s", t_str)) != t.GetDstLang() {
changed = true
config.Set(fmt.Sprintf("destination.language.%s", t_str), t.GetDstLang())
}
}
}
if config.GetString("translator") != translator.GetEngineName() {
changed = true
config.Set("translator", translator.GetEngineName())
}
if config.GetBool("hide_below") != hideBelow {
changed = true
config.Set("hide_below", hideBelow)
}
if config.GetString("theme") != uiStyle.Theme {
changed = true
config.Set("theme", uiStyle.Theme)
}
if config.GetBool("transparent") != uiStyle.Transparent {
changed = true
config.Set("transparent", uiStyle.Transparent)
}
if config.GetString("source.borderColor") != uiStyle.SrcBorderStr() {
changed = true
config.Set("source.borderColor", uiStyle.SrcBorderStr())
}
if config.GetString("destination.borderColor") != uiStyle.DstBorderStr() {
changed = true
config.Set("destination.borderColor", uiStyle.DstBorderStr())
}
if changed {
config.WriteConfig()
}
}