Spaces:
Running
Running
package handles | |
import ( | |
"github.com/alist-org/alist/v3/internal/conf" | |
"github.com/alist-org/alist/v3/internal/model" | |
"github.com/alist-org/alist/v3/internal/offline_download/tool" | |
"github.com/alist-org/alist/v3/internal/op" | |
"github.com/alist-org/alist/v3/server/common" | |
"github.com/gin-gonic/gin" | |
"github.com/xhofe/tache" | |
) | |
type SetAria2Req struct { | |
Uri string `json:"uri" form:"uri"` | |
Secret string `json:"secret" form:"secret"` | |
} | |
func SetAria2(c *gin.Context) { | |
var req SetAria2Req | |
if err := c.ShouldBind(&req); err != nil { | |
common.ErrorResp(c, err, 400) | |
return | |
} | |
items := []model.SettingItem{ | |
{Key: conf.Aria2Uri, Value: req.Uri, Type: conf.TypeString, Group: model.OFFLINE_DOWNLOAD, Flag: model.PRIVATE}, | |
{Key: conf.Aria2Secret, Value: req.Secret, Type: conf.TypeString, Group: model.OFFLINE_DOWNLOAD, Flag: model.PRIVATE}, | |
} | |
if err := op.SaveSettingItems(items); err != nil { | |
common.ErrorResp(c, err, 500) | |
return | |
} | |
_tool, err := tool.Tools.Get("aria2") | |
version, err := _tool.Init() | |
if err != nil { | |
common.ErrorResp(c, err, 500) | |
return | |
} | |
common.SuccessResp(c, version) | |
} | |
type SetQbittorrentReq struct { | |
Url string `json:"url" form:"url"` | |
Seedtime string `json:"seedtime" form:"seedtime"` | |
} | |
func SetQbittorrent(c *gin.Context) { | |
var req SetQbittorrentReq | |
if err := c.ShouldBind(&req); err != nil { | |
common.ErrorResp(c, err, 400) | |
return | |
} | |
items := []model.SettingItem{ | |
{Key: conf.QbittorrentUrl, Value: req.Url, Type: conf.TypeString, Group: model.OFFLINE_DOWNLOAD, Flag: model.PRIVATE}, | |
{Key: conf.QbittorrentSeedtime, Value: req.Seedtime, Type: conf.TypeNumber, Group: model.OFFLINE_DOWNLOAD, Flag: model.PRIVATE}, | |
} | |
if err := op.SaveSettingItems(items); err != nil { | |
common.ErrorResp(c, err, 500) | |
return | |
} | |
_tool, err := tool.Tools.Get("qBittorrent") | |
if err != nil { | |
common.ErrorResp(c, err, 500) | |
return | |
} | |
if _, err := _tool.Init(); err != nil { | |
common.ErrorResp(c, err, 500) | |
return | |
} | |
common.SuccessResp(c, "ok") | |
} | |
func OfflineDownloadTools(c *gin.Context) { | |
tools := tool.Tools.Names() | |
common.SuccessResp(c, tools) | |
} | |
type AddOfflineDownloadReq struct { | |
Urls []string `json:"urls"` | |
Path string `json:"path"` | |
Tool string `json:"tool"` | |
DeletePolicy string `json:"delete_policy"` | |
} | |
func AddOfflineDownload(c *gin.Context) { | |
user := c.MustGet("user").(*model.User) | |
if !user.CanAddOfflineDownloadTasks() { | |
common.ErrorStrResp(c, "permission denied", 403) | |
return | |
} | |
var req AddOfflineDownloadReq | |
if err := c.ShouldBind(&req); err != nil { | |
common.ErrorResp(c, err, 400) | |
return | |
} | |
reqPath, err := user.JoinPath(req.Path) | |
if err != nil { | |
common.ErrorResp(c, err, 403) | |
return | |
} | |
var tasks []tache.TaskWithInfo | |
for _, url := range req.Urls { | |
t, err := tool.AddURL(c, &tool.AddURLArgs{ | |
URL: url, | |
DstDirPath: reqPath, | |
Tool: req.Tool, | |
DeletePolicy: tool.DeletePolicy(req.DeletePolicy), | |
}) | |
if err != nil { | |
common.ErrorResp(c, err, 500) | |
return | |
} | |
tasks = append(tasks, t) | |
} | |
common.SuccessResp(c, gin.H{ | |
"tasks": getTaskInfos(tasks), | |
}) | |
} | |