Modify: remove database operations from aria2 RPC caller implementation

This commit is contained in:
HFO4 2021-08-19 20:19:10 +08:00
parent 154bf36a33
commit cb737be9bb
4 changed files with 23 additions and 18 deletions

View file

@ -23,7 +23,7 @@ var EventNotifier = &Notifier{}
// Aria2 离线下载处理接口
type Aria2 interface {
// CreateTask 创建新的任务
CreateTask(task *model.Download, options map[string]interface{}) error
CreateTask(task *model.Download, options map[string]interface{}) (string, error)
// 返回状态信息
Status(task *model.Download) (rpc.StatusInfo, error)
// 取消任务
@ -68,8 +68,8 @@ type DummyAria2 struct {
}
// CreateTask 创建新任务,此处直接返回未开启错误
func (instance *DummyAria2) CreateTask(model *model.Download, options map[string]interface{}) error {
return ErrNotEnabled
func (instance *DummyAria2) CreateTask(model *model.Download, options map[string]interface{}) (string, error) {
return "", ErrNotEnabled
}
// Status 返回未开启错误

View file

@ -85,7 +85,7 @@ func (client *RPCService) Select(task *model.Download, files []int) error {
}
// CreateTask 创建新任务
func (client *RPCService) CreateTask(task *model.Download, groupOptions map[string]interface{}) error {
func (client *RPCService) CreateTask(task *model.Download, groupOptions map[string]interface{}) (string, error) {
// 生成存储路径
path := filepath.Join(
model.GetSettingByName("aria2_temp_path"),
@ -106,18 +106,8 @@ func (client *RPCService) CreateTask(task *model.Download, groupOptions map[stri
gid, err := client.Caller.AddURI(task.Source, options)
if err != nil || gid == "" {
return err
return "", err
}
// 保存到数据库
task.GID = gid
_, err = task.Create()
if err != nil {
return err
}
// 创建任务监控
NewMonitor(task)
return nil
return gid, nil
}

View file

@ -29,3 +29,8 @@ func (node *MasterNode) SubscribeStatusChange(callback func(isActive bool, id ui
func (node *MasterNode) IsActive() bool {
return true
}
// InitAria2RPCClient 初始化主机 Aria2 RPC 服务
func (node *MasterNode) InitAria2RPCClient() error {
return nil
}

View file

@ -43,11 +43,21 @@ func (service *AddURLService) Add(c *gin.Context, taskType int) serializer.Respo
}
aria2.Lock.RLock()
if err := aria2.Instance.CreateTask(task, fs.User.Group.OptionsSerialized.Aria2Options); err != nil {
gid, err := aria2.Instance.CreateTask(task, fs.User.Group.OptionsSerialized.Aria2Options)
if err != nil {
aria2.Lock.RUnlock()
return serializer.Err(serializer.CodeNotSet, "任务创建失败", err)
}
aria2.Lock.RUnlock()
task.GID = gid
_, err = task.Create()
if err != nil {
return serializer.DBErr("任务创建失败", err)
}
// 创建任务监控
aria2.NewMonitor(task)
aria2.Lock.RUnlock()
return serializer.Response{}
}