56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
// defaultAppPaths 收集运行时路径,支持环境变量覆盖,方便不同平台和部署方式调整。
|
|
func defaultAppPaths() appPaths {
|
|
return appPaths{
|
|
ConfigFile: envOrDefault("DOUYU_CONFIG", defaultConfigFile),
|
|
AccountFile: envOrDefault("DOUYU_USERS", defaultAccountFile),
|
|
LogDir: envOrDefault("DOUYU_LOG_DIR", defaultLogDir),
|
|
SuccessDir: envOrDefault("DOUYU_SUCCESS_DIR", defaultSuccessDir),
|
|
FontFiles: collectFontCandidates(),
|
|
}
|
|
}
|
|
|
|
func envOrDefault(key, fallback string) string {
|
|
if value := os.Getenv(key); value != "" {
|
|
return filepath.Clean(value)
|
|
}
|
|
return fallback
|
|
}
|
|
|
|
// loadConfig 读取配置文件;缺失时安静使用内置默认配置。
|
|
func loadConfig(path string) Config {
|
|
cfg := Config{TimeAPIURL: defaultTimeAPI}
|
|
if path == "" {
|
|
path = defaultConfigFile
|
|
}
|
|
|
|
f, err := os.Open(path)
|
|
if err != nil {
|
|
if errors.Is(err, os.ErrNotExist) {
|
|
logEvent("配置", "info", "配置加载完成: 内置默认配置")
|
|
} else {
|
|
logEvent("配置", "warn", "读取 %s 出错,使用内置默认配置: %v", path, err)
|
|
}
|
|
return cfg
|
|
}
|
|
defer f.Close()
|
|
|
|
if err := json.NewDecoder(f).Decode(&cfg); err != nil {
|
|
logEvent("配置", "warn", "解析 %s 失败,使用内置默认配置: %v", path, err)
|
|
return Config{TimeAPIURL: defaultTimeAPI}
|
|
}
|
|
if cfg.TimeAPIURL == "" {
|
|
cfg.TimeAPIURL = defaultTimeAPI
|
|
}
|
|
logEvent("配置", "success", "配置加载完成: %s", path)
|
|
return cfg
|
|
}
|