Files
Ant-Browser/backend/bootstrap.go
T
Ant Browser Release Bot 6f58a6c19a publish: 1.0.0 snapshot (bad2ec1)
channel: master
version: 1.0.0
source-ref: master
published-at-utc: 2026-03-13T15:19:28Z
2026-03-13 23:19:29 +08:00

70 lines
1.9 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)
configChanged := false
repairedConfig := false
if err == nil {
if changed, _, syncErr := reconcileConfigWithLocalLicense(path, cfg); syncErr != nil {
return cfg, syncErr
} else {
configChanged = changed
}
if configChanged {
if saveErr := cfg.Save(path); saveErr != nil {
return cfg, fmt.Errorf("写回配置失败: %w", saveErr)
}
}
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 changed, _, syncErr := reconcileConfigWithLocalLicense(path, defaultCfg); syncErr != nil {
return defaultCfg, syncErr
} else {
configChanged = changed
}
if repairedConfig || configChanged {
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()
}