Feat(remotearia2): 删除任务

This commit is contained in:
Cian John 2021-03-20 18:32:25 +08:00
parent 8c97021e8f
commit a5bb4560b9
4 changed files with 56 additions and 16 deletions

View file

@ -10,6 +10,7 @@ import (
"github.com/cloudreve/Cloudreve/v3/pkg/serializer"
"net/url"
"path"
"strconv"
"strings"
)
@ -36,7 +37,6 @@ func (client *RemoteService) CreateTask(task *model.Download, options map[string
return err
}
// 发送列表请求
bodyReader := strings.NewReader(string(reqBodyEncoded))
signTTL := model.GetIntSetting("slave_api_timeout", 60)
resp, err := client.Client.Request(
@ -49,31 +49,35 @@ func (client *RemoteService) CreateTask(task *model.Download, options map[string
return err
}
// 处理列取结果
if resp.Code != 0 {
return errors.New(resp.Error)
}
if resStr, ok := resp.Data.(string); ok {
var res serializer.Response
err = json.Unmarshal([]byte(resStr), &res)
if err != nil {
return err
}
if res.Code != 0 {
return errors.New(res.Msg)
}
return errors.New(resp.Msg)
}
return nil
}
func (client *RemoteService) Status(task *model.Download) (rpc.StatusInfo, error) {
panic("implement me")
// 远程 Aria2 不会使用此方法
return rpc.StatusInfo{}, nil
}
func (client *RemoteService) Cancel(task *model.Download) error {
panic("implement me")
signTTL := model.GetIntSetting("slave_api_timeout", 60)
resp, err := client.Client.Request(
"POST",
client.getAPIUrl("cancel", strconv.Itoa(int(task.ID))),
nil,
request.WithCredential(client.AuthInstance, int64(signTTL)),
).CheckHTTPResponse(200).DecodeResponse()
if err != nil {
return err
}
if resp.Code != 0 {
return errors.New(resp.Error)
}
return nil
}
func (client *RemoteService) Select(task *model.Download, files []int) error {
@ -91,6 +95,8 @@ func (client *RemoteService) getAPIUrl(scope string, routes ...string) string {
switch scope {
case "add":
controller, _ = url.Parse("/api/v3/slave/aria2/add")
case "cancel":
controller, _ = url.Parse("/api/v3/slave/aria2/cancel")
default:
controller = serverURL
}

View file

@ -187,3 +187,14 @@ func SlaveAria2Add(c *gin.Context) {
c.JSON(200, ErrorResponse(err))
}
}
// SlaveAria2Cancel 从机删除远程下载任务
func SlaveAria2Cancel(c *gin.Context) {
var service slave.Aria2CancelService
if err := c.ShouldBindUri(&service); err == nil {
res := service.Cancel()
c.JSON(200, res)
} else {
c.JSON(200, ErrorResponse(err))
}
}

View file

@ -55,6 +55,7 @@ func InitSlaveRouter() *gin.Engine {
aria2.Use(middleware.SignRequired())
{
aria2.POST("add", controllers.SlaveAria2Add)
aria2.POST("cancel/:taskId", controllers.SlaveAria2Cancel)
}
return r
}

View file

@ -12,6 +12,10 @@ type Aria2AddService struct {
Options map[string]interface{} `json:"options"`
}
type Aria2CancelService struct {
TaskId uint `uri:"taskId"`
}
func (service *Aria2AddService) Add() serializer.Response {
task, err := model.GetDownloadById(service.TaskId)
if err != nil {
@ -26,3 +30,21 @@ func (service *Aria2AddService) Add() serializer.Response {
aria2.Lock.RUnlock()
return serializer.Response{}
}
func (service *Aria2CancelService) Cancel() serializer.Response {
task, err := model.GetDownloadById(service.TaskId)
if err != nil {
util.Log().Warning("无法获取记录, %s", err)
return serializer.Err(serializer.CodeNotSet, "任务创建失败, 无法获取记录", err)
}
// 取消任务
aria2.Lock.RLock()
defer aria2.Lock.RUnlock()
if err := aria2.Instance.Cancel(task); err != nil {
util.Log().Debug("删除远程下载任务出错, %s", err)
return serializer.Err(serializer.CodeNotSet, "操作失败", err)
}
return serializer.Response{}
}