refactor: modularize downloader architecture
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
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) }
|
||||
Reference in New Issue
Block a user