Feat(remotearia2): 删除任务
This commit is contained in:
parent
8c97021e8f
commit
a5bb4560b9
4 changed files with 56 additions and 16 deletions
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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{}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue