feat: add local file retention policy
This commit is contained in:
@@ -59,8 +59,8 @@ type SongRequest struct {
|
||||
Quality string `json:"quality"`
|
||||
}
|
||||
type Config struct {
|
||||
AMAPI, DownloadDir, WebDAVURL, WebDAVUser, WebDAVPass, WebDAVPath, DefaultQuality, WebDAVVersionPolicy string
|
||||
WorkerCount int
|
||||
AMAPI, DownloadDir, WebDAVURL, WebDAVUser, WebDAVPass, WebDAVPath, DefaultQuality, WebDAVVersionPolicy, LocalFilePolicy string
|
||||
WorkerCount int
|
||||
}
|
||||
type App struct {
|
||||
db *gorm.DB
|
||||
@@ -89,6 +89,9 @@ func main() {
|
||||
if a.cfg.WebDAVVersionPolicy == "" {
|
||||
a.cfg.WebDAVVersionPolicy = "keep"
|
||||
}
|
||||
if a.cfg.LocalFilePolicy == "" {
|
||||
a.cfg.LocalFilePolicy = "keep"
|
||||
}
|
||||
a.startWorkers()
|
||||
r := gin.Default()
|
||||
r.StaticFile("/", "/app/index.html")
|
||||
@@ -125,6 +128,8 @@ func (a *App) loadSettings() {
|
||||
a.cfg.DefaultQuality = s.Value
|
||||
case "webdav_version_policy":
|
||||
a.cfg.WebDAVVersionPolicy = s.Value
|
||||
case "local_file_policy":
|
||||
a.cfg.LocalFilePolicy = s.Value
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -434,6 +439,7 @@ func (a *App) upload(t *Task) {
|
||||
t.Status = "done"
|
||||
t.Progress = 100
|
||||
a.db.Save(t)
|
||||
a.cleanupLocalFile(t)
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -453,6 +459,16 @@ func (a *App) upload(t *Task) {
|
||||
t.Status = "done"
|
||||
t.Progress = 100
|
||||
a.db.Save(t)
|
||||
a.cleanupLocalFile(t)
|
||||
}
|
||||
func (a *App) cleanupLocalFile(t *Task) {
|
||||
if a.cfg.LocalFilePolicy != "delete_after_upload" || t.LocalPath == "" {
|
||||
return
|
||||
}
|
||||
if err := os.Remove(t.LocalPath); err != nil && !os.IsNotExist(err) {
|
||||
t.Error = "WebDAV 上传成功,但删除本地文件失败: " + err.Error()
|
||||
a.db.Save(t)
|
||||
}
|
||||
}
|
||||
func (a *App) removeLowerQualityVersions(client *gowebdav.Client, remote string, t *Task) {
|
||||
levels := map[string]int{"standard": 1, "exhigh": 2, "sq": 3, "lossless": 4, "hires": 5, "jyeffect": 6, "sky": 7, "jymaster": 8, "atmos": 9, "atmos_plus": 10, "master": 11}
|
||||
@@ -495,7 +511,7 @@ func (a *App) fail(t *Task, err error) {
|
||||
}
|
||||
|
||||
func (a *App) getSettings(c *gin.Context) {
|
||||
c.JSON(200, gin.H{"amApi": a.cfg.AMAPI, "downloadDir": a.cfg.DownloadDir, "webdavUrl": a.cfg.WebDAVURL, "webdavUser": a.cfg.WebDAVUser, "webdavPass": a.cfg.WebDAVPass, "webdavPath": a.cfg.WebDAVPath, "quality": a.cfg.DefaultQuality, "webdavVersionPolicy": a.cfg.WebDAVVersionPolicy})
|
||||
c.JSON(200, gin.H{"amApi": a.cfg.AMAPI, "downloadDir": a.cfg.DownloadDir, "webdavUrl": a.cfg.WebDAVURL, "webdavUser": a.cfg.WebDAVUser, "webdavPass": a.cfg.WebDAVPass, "webdavPath": a.cfg.WebDAVPath, "quality": a.cfg.DefaultQuality, "webdavVersionPolicy": a.cfg.WebDAVVersionPolicy, "localFilePolicy": a.cfg.LocalFilePolicy})
|
||||
}
|
||||
func (a *App) putSettings(c *gin.Context) {
|
||||
var v map[string]string
|
||||
@@ -510,6 +526,9 @@ func (a *App) putSettings(c *gin.Context) {
|
||||
if p := v["webdavVersionPolicy"]; p != "keep" && p != "replace_lower" {
|
||||
v["webdavVersionPolicy"] = "keep"
|
||||
}
|
||||
if p := v["localFilePolicy"]; p != "keep" && p != "delete_after_upload" {
|
||||
v["localFilePolicy"] = "keep"
|
||||
}
|
||||
if x := v["downloadDir"]; x != "" {
|
||||
a.cfg.DownloadDir = x
|
||||
a.save("download_dir", x)
|
||||
@@ -523,7 +542,10 @@ func (a *App) putSettings(c *gin.Context) {
|
||||
if p := v["webdavVersionPolicy"]; p == "keep" || p == "replace_lower" {
|
||||
a.cfg.WebDAVVersionPolicy = p
|
||||
}
|
||||
for k, x := range map[string]string{"webdav_url": a.cfg.WebDAVURL, "webdav_user": a.cfg.WebDAVUser, "webdav_pass": a.cfg.WebDAVPass, "webdav_path": a.cfg.WebDAVPath, "quality": a.cfg.DefaultQuality, "webdav_version_policy": a.cfg.WebDAVVersionPolicy} {
|
||||
if p := v["localFilePolicy"]; p == "keep" || p == "delete_after_upload" {
|
||||
a.cfg.LocalFilePolicy = p
|
||||
}
|
||||
for k, x := range map[string]string{"webdav_url": a.cfg.WebDAVURL, "webdav_user": a.cfg.WebDAVUser, "webdav_pass": a.cfg.WebDAVPass, "webdav_path": a.cfg.WebDAVPath, "quality": a.cfg.DefaultQuality, "webdav_version_policy": a.cfg.WebDAVVersionPolicy, "local_file_policy": a.cfg.LocalFilePolicy} {
|
||||
a.save(k, x)
|
||||
}
|
||||
c.JSON(200, gin.H{"ok": true})
|
||||
|
||||
Reference in New Issue
Block a user