| 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/pkg/tache" | |
| "github.com/alist-org/alist/v3/server/common" | |
| "github.com/gin-gonic/gin" | |
| ) | |
| 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), | |
| }) | |
| } | |