90 lines
1.8 KiB
Go
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) }
|