Files
Ant-Browser/backend/bootstrap.go
T

54 lines
1.4 KiB
Go

package backend
import (
appconfig "ant-chrome/backend/internal/config"
apptray "ant-chrome/backend/internal/tray"
"fmt"
"os"
"path/filepath"
"time"
)
type Config = appconfig.Config
type TrayCallbacks = apptray.Callbacks
func LoadConfig(path string) (*Config, error) {
cfg, err := appconfig.Load(path)
repairedConfig := false
if err == nil {
return cfg, nil
}
// 配置文件存在但内容损坏时,自动备份并重建默认配置,避免启动阶段反复报错。
if data, readErr := os.ReadFile(path); readErr == nil && len(data) > 0 {
backupPath := fmt.Sprintf("%s.broken-%s", path, time.Now().Format("20060102-150405"))
if writeErr := os.WriteFile(backupPath, data, 0644); writeErr != nil {
return appconfig.DefaultConfig(), fmt.Errorf("加载配置失败: %w;备份损坏配置失败: %v", err, writeErr)
}
}
defaultCfg := appconfig.DefaultConfig()
repairedConfig = true
if repairedConfig {
if saveErr := os.MkdirAll(filepath.Dir(path), 0755); saveErr != nil {
return defaultCfg, fmt.Errorf("加载配置失败: %w;创建配置目录失败: %v", err, saveErr)
}
if saveErr := defaultCfg.Save(path); saveErr != nil {
return defaultCfg, fmt.Errorf("加载配置失败: %w;重建默认配置失败: %v", err, saveErr)
}
}
return defaultCfg, nil
}
func DefaultConfig() *Config {
return appconfig.DefaultConfig()
}
func RunTray(cb TrayCallbacks) {
apptray.Run(cb)
}
func QuitTray() {
apptray.Quit()
}