package main import ( "os" "path/filepath" "strconv" "strings" "gorm.io/gorm" ) func (a *App) loadSettings() { var ss []Setting a.db.Find(&ss) for _, s := range ss { switch s.Key { case "am_api": a.cfg.AMAPI = s.Value case "download_dir": a.cfg.DownloadDir = s.Value case "webdav_url": a.cfg.WebDAVURL = s.Value case "webdav_user": a.cfg.WebDAVUser = s.Value case "webdav_pass": a.cfg.WebDAVPass = s.Value case "webdav_path": a.cfg.WebDAVPath = s.Value case "quality": a.cfg.DefaultQuality = s.Value case "webdav_version_policy": a.cfg.WebDAVVersionPolicy = s.Value case "local_file_policy": a.cfg.LocalFilePolicy = s.Value } } } func (a *App) saveSetting(k, v string) { var s Setting if a.db.Where("key = ?", k).First(&s).Error != nil { a.db.Create(&Setting{Key: k, Value: v}) } else { s.Value = v a.db.Save(&s) } } func loadConfig(db *gorm.DB) Config { cfg := Config{ AMAPI: getenv("AM_API_URL", "http://127.0.0.1:9530/api"), DownloadDir: getenv("DOWNLOAD_DIR", "/downloads"), DefaultQuality: getenv("DEFAULT_QUALITY", "standard"), WorkerCount: atoi(getenv("WORKERS", "2"), 2), } _ = db return cfg } func normalizeConfig(cfg *Config) { if cfg.WorkerCount < 1 { cfg.WorkerCount = 1 } if cfg.WebDAVVersionPolicy != "keep" && cfg.WebDAVVersionPolicy != "replace_lower" { cfg.WebDAVVersionPolicy = "keep" } if cfg.LocalFilePolicy != "keep" && cfg.LocalFilePolicy != "delete_after_upload" { cfg.LocalFilePolicy = "keep" } cfg.WebDAVPath = strings.Trim(cfg.WebDAVPath, "/") _ = os.MkdirAll(cfg.DownloadDir, 0755) } func getenv(k, d string) string { if v := os.Getenv(k); v != "" { return v } return d } func atoi(s string, d int) int { v, e := strconv.Atoi(s) if e != nil || v < 1 { return d } return v } func dbDir(path string) string { return filepath.Dir(path) }