Files

90 lines
1.8 KiB
Go

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) }