116 lines
2.4 KiB
Go
116 lines
2.4 KiB
Go
package utils
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"sync"
|
|
)
|
|
|
|
// ConfigCache 配置缓存
|
|
type ConfigCache struct {
|
|
mu sync.RWMutex
|
|
toolStatus map[string]interface{}
|
|
updateInfo map[string]interface{}
|
|
mediaTypes map[string]interface{}
|
|
}
|
|
|
|
var configCache = &ConfigCache{}
|
|
|
|
// LoadConfig 加载配置文件
|
|
func LoadConfig(filename string) (map[string]interface{}, error) {
|
|
filePath := filepath.Join("public", filename)
|
|
|
|
data, err := os.ReadFile(filePath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var config map[string]interface{}
|
|
if err := json.Unmarshal(data, &config); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return config, nil
|
|
}
|
|
|
|
// SaveConfig 保存配置文件并更新缓存
|
|
func SaveConfig(filename string, config map[string]interface{}) error {
|
|
filePath := filepath.Join("public", filename)
|
|
|
|
// 转换为 JSON
|
|
jsonData, err := json.MarshalIndent(config, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 保存文件
|
|
if err := os.WriteFile(filePath, jsonData, 0644); err != nil {
|
|
return err
|
|
}
|
|
|
|
// 更新缓存
|
|
configCache.mu.Lock()
|
|
defer configCache.mu.Unlock()
|
|
|
|
switch filename {
|
|
case "tool-status.json":
|
|
configCache.toolStatus = config
|
|
case "update-info.json":
|
|
configCache.updateInfo = config
|
|
case "media-types.json":
|
|
configCache.mediaTypes = config
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// GetCachedConfig 获取缓存的配置
|
|
func GetCachedConfig(filename string) (map[string]interface{}, bool) {
|
|
configCache.mu.RLock()
|
|
defer configCache.mu.RUnlock()
|
|
|
|
switch filename {
|
|
case "tool-status.json":
|
|
if configCache.toolStatus != nil {
|
|
return configCache.toolStatus, true
|
|
}
|
|
case "update-info.json":
|
|
if configCache.updateInfo != nil {
|
|
return configCache.updateInfo, true
|
|
}
|
|
case "media-types.json":
|
|
if configCache.mediaTypes != nil {
|
|
return configCache.mediaTypes, true
|
|
}
|
|
}
|
|
|
|
return nil, false
|
|
}
|
|
|
|
// ReloadConfig 重新加载配置
|
|
func ReloadConfig(filename string) error {
|
|
config, err := LoadConfig(filename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return SaveConfig(filename, config)
|
|
}
|
|
|
|
// InitConfigCache 初始化配置缓存
|
|
func InitConfigCache() error {
|
|
files := []string{"tool-status.json", "update-info.json", "media-types.json"}
|
|
|
|
for _, file := range files {
|
|
if _, err := os.Stat(filepath.Join("public", file)); err == nil {
|
|
config, err := LoadConfig(file)
|
|
if err == nil {
|
|
SaveConfig(file, config)
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|