mirror of
https://github.com/teest114514/chatlog_alpha.git
synced 2026-04-17 01:22:31 +08:00
106 lines
2.4 KiB
Go
106 lines
2.4 KiB
Go
package conf
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/rs/zerolog/log"
|
|
"github.com/sjzar/chatlog/pkg/config"
|
|
)
|
|
|
|
const (
|
|
AppName = "chatlog"
|
|
ServerConfigName = "chatlog-server"
|
|
EnvPrefix = "CHATLOG"
|
|
EnvConfigDir = "CHATLOG_DIR"
|
|
)
|
|
|
|
// LoadTUIConfig 加载 TUI 配置
|
|
func LoadTUIConfig(configPath string) (*TUIConfig, *config.Manager, error) {
|
|
|
|
if configPath == "" {
|
|
configPath = os.Getenv(EnvConfigDir)
|
|
}
|
|
|
|
tcm, err := config.New(AppName, configPath, "", "", true)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("load tui config failed")
|
|
return nil, nil, err
|
|
}
|
|
|
|
conf := &TUIConfig{}
|
|
config.SetDefaults(tcm.Viper, conf, TUIDefaults)
|
|
|
|
if err := tcm.Load(conf); err != nil {
|
|
log.Error().Err(err).Msg("load tui config failed")
|
|
return nil, nil, err
|
|
}
|
|
conf.ConfigDir = tcm.Path
|
|
|
|
b, _ := json.Marshal(conf)
|
|
log.Info().Msgf("tui config: %s", string(b))
|
|
|
|
return conf, tcm, nil
|
|
}
|
|
|
|
// LoadServiceConfig 加载服务配置
|
|
func LoadServiceConfig(configPath string, cmdConf map[string]any) (*ServerConfig, *config.Manager, error) {
|
|
|
|
if configPath == "" {
|
|
configPath = os.Getenv(EnvConfigDir)
|
|
}
|
|
|
|
scm, err := config.New(AppName, configPath, ServerConfigName, EnvPrefix, false)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("load server config failed")
|
|
return nil, nil, err
|
|
}
|
|
|
|
conf := &ServerConfig{}
|
|
config.SetDefaults(scm.Viper, conf, ServerDefaults)
|
|
|
|
// Load cmd Conf
|
|
for key, value := range cmdConf {
|
|
scm.SetConfig(key, value)
|
|
}
|
|
|
|
if err := scm.Load(conf); err != nil {
|
|
log.Error().Err(err).Msg("load server config failed")
|
|
return nil, nil, err
|
|
}
|
|
|
|
// Load Data Dir config
|
|
if len(conf.DataDir) != 0 && len(conf.DataKey) == 0 {
|
|
if b, err := os.ReadFile(filepath.Join(conf.DataDir, "chatlog.json")); err == nil {
|
|
var pconf map[string]any
|
|
if err := json.Unmarshal(b, &pconf); err == nil {
|
|
for key, value := range pconf {
|
|
if !DataDirConfigs[key] {
|
|
continue
|
|
}
|
|
scm.SetConfig(key, value)
|
|
}
|
|
}
|
|
}
|
|
if err := scm.Load(conf); err != nil {
|
|
log.Error().Err(err).Msg("reload server config failed")
|
|
return nil, nil, err
|
|
}
|
|
}
|
|
|
|
b, _ := json.Marshal(conf)
|
|
log.Info().Msgf("server config: %s", string(b))
|
|
|
|
return conf, scm, nil
|
|
}
|
|
|
|
var DataDirConfigs = map[string]bool{
|
|
"type": true,
|
|
"platform": true,
|
|
"version": true,
|
|
"full_version": true,
|
|
"data_key": true,
|
|
"img_key": true,
|
|
}
|