Files
u-desktop/config.go

151 lines
3.7 KiB
Go

package main
import (
_ "embed"
"encoding/json"
"log"
"os"
"path/filepath"
)
type WallpaperType string
const (
WPTheme WallpaperType = "theme"
WPImage WallpaperType = "image"
WPBing WallpaperType = "bing"
WPColor WallpaperType = "color"
)
type Layout string
const (
LayoutSingle Layout = "single"
LayoutMulti Layout = "multi"
)
type ThemeName string
const (
ThemeAurora ThemeName = "aurora"
ThemeStar ThemeName = "starfield"
ThemeGradient ThemeName = "gradient"
ThemeParticle ThemeName = "particles"
ThemeFractal ThemeName = "fractal"
ThemeText ThemeName = "text"
)
type SavedColor struct {
Color1 string `json:"color1"`
Color2 string `json:"color2"`
Gradient bool `json:"gradient"`
}
type Config struct {
Zodiac string `json:"zodiac"`
City string `json:"city"`
WallpaperType WallpaperType `json:"wallpaperType"`
Theme ThemeName `json:"theme"`
ImagePath string `json:"imagePath"`
Color1 string `json:"color1"`
Color2 string `json:"color2"`
ColorGradient bool `json:"colorGradient"`
WallpaperText string `json:"wallpaperText"`
Layout Layout `json:"layout"`
HideWallpaper bool `json:"hideWallpaper"`
HideTime bool `json:"hideTime"`
HideWeather bool `json:"hideWeather"`
HideZodiac bool `json:"hideZodiac"`
HideAINews bool `json:"hideAINews"`
ShowSeconds bool `json:"showSeconds"`
PhotoDir string `json:"photoDir"`
PhotoInterval int `json:"photoInterval"`
HidePhoto bool `json:"hidePhoto"`
PhotoFrameMode bool `json:"photoFrameMode"`
KnowledgeKeyword string `json:"knowledgeKeyword"`
KnowledgePrompt string `json:"knowledgePrompt"`
HideKnowledge bool `json:"hideKnowledge"`
SavedColors []SavedColor `json:"savedColors"`
BingAutoRefresh bool `json:"bingAutoRefresh"`
AutoStart bool `json:"autoStart"`
QWeatherKey string `json:"qweatherKey,omitempty"`
TianapiKey string `json:"tianapiKey,omitempty"`
CPAKey string `json:"cpaKey,omitempty"`
}
const defaultZodiac = "射手座"
var configPath string
//go:embed assets/icons/tray.ico
var trayIcon []byte
func configDir() string {
return filepath.Dir(configPath)
}
func loadConfig() *Config {
data, err := os.ReadFile(configPath)
if err != nil {
return defaultConfig()
}
var cfg Config
if json.Unmarshal(data, &cfg) != nil {
return defaultConfig()
}
if cfg.Zodiac == "" {
cfg.Zodiac = defaultZodiac
}
if cfg.WallpaperType == "" {
cfg.WallpaperType = WPTheme
}
if cfg.Theme == "" {
cfg.Theme = ThemeAurora
}
if cfg.Color1 == "" {
cfg.Color1 = "#1a1a2e"
}
if cfg.Layout == "" {
cfg.Layout = LayoutSingle
}
return &cfg
}
func defaultConfig() *Config {
return &Config{
Zodiac: defaultZodiac,
WallpaperType: WPTheme,
Theme: ThemeAurora,
Color1: "#1a1a2e",
Color2: "#16213e",
}
}
func saveConfig(cfg *Config) error {
data, err := json.MarshalIndent(cfg, "", " ")
if err != nil {
log.Println("配置序列化失败:", err)
return err
}
return os.WriteFile(configPath, data, 0644)
}
func getSecret(envName, cfgValue string) string {
if v := os.Getenv(envName); v != "" {
return v
}
return cfgValue
}
func (c *Config) qweatherKey() string {
return getSecret("U_DESKTOP_QWEATHER_KEY", c.QWeatherKey)
}
func (c *Config) tianapiKey() string {
return getSecret("U_DESKTOP_TIANAPI_KEY", c.TianapiKey)
}
func (c *Config) cpaKey() string {
return getSecret("U_DESKTOP_CPA_KEY", c.CPAKey)
}