Feat: group-defined aria2 download options
This commit is contained in:
parent
c29695a40d
commit
cde49e6e98
5 changed files with 26 additions and 16 deletions
|
@ -25,14 +25,15 @@ type Group struct {
|
||||||
|
|
||||||
// GroupOption 用户组其他配置
|
// GroupOption 用户组其他配置
|
||||||
type GroupOption struct {
|
type GroupOption struct {
|
||||||
ArchiveDownload bool `json:"archive_download,omitempty"` // 打包下载
|
ArchiveDownload bool `json:"archive_download,omitempty"` // 打包下载
|
||||||
ArchiveTask bool `json:"archive_task,omitempty"` // 在线压缩
|
ArchiveTask bool `json:"archive_task,omitempty"` // 在线压缩
|
||||||
CompressSize uint64 `json:"compress_size,omitempty"` // 可压缩大小
|
CompressSize uint64 `json:"compress_size,omitempty"` // 可压缩大小
|
||||||
DecompressSize uint64 `json:"decompress_size,omitempty"`
|
DecompressSize uint64 `json:"decompress_size,omitempty"`
|
||||||
OneTimeDownload bool `json:"one_time_download,omitempty"`
|
OneTimeDownload bool `json:"one_time_download,omitempty"`
|
||||||
ShareDownload bool `json:"share_download,omitempty"`
|
ShareDownload bool `json:"share_download,omitempty"`
|
||||||
ShareFree bool `json:"share_free,omitempty"`
|
ShareFree bool `json:"share_free,omitempty"`
|
||||||
Aria2 bool `json:"aria2,omitempty"` // 离线下载
|
Aria2 bool `json:"aria2,omitempty"` // 离线下载
|
||||||
|
Aria2Options []interface{} `json:"aria2_options,omitempty"` // 离线下载用户组配置
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAria2Option 获取用户离线下载设备
|
// GetAria2Option 获取用户离线下载设备
|
||||||
|
|
|
@ -160,7 +160,7 @@ Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; verti
|
||||||
{Name: "aria2_token", Value: `your token`, Type: "aria2"},
|
{Name: "aria2_token", Value: `your token`, Type: "aria2"},
|
||||||
{Name: "aria2_token", Value: `your token`, Type: "aria2"},
|
{Name: "aria2_token", Value: `your token`, Type: "aria2"},
|
||||||
{Name: "aria2_temp_path", Value: ``, Type: "aria2"},
|
{Name: "aria2_temp_path", Value: ``, Type: "aria2"},
|
||||||
{Name: "aria2_options", Value: `{"max-tries":5}`, Type: "aria2"},
|
{Name: "aria2_options", Value: `[]`, Type: "aria2"},
|
||||||
{Name: "aria2_interval", Value: `10`, Type: "aria2"},
|
{Name: "aria2_interval", Value: `10`, Type: "aria2"},
|
||||||
{Name: "max_worker_num", Value: `10`, Type: "task"},
|
{Name: "max_worker_num", Value: `10`, Type: "task"},
|
||||||
{Name: "max_parallel_transfer", Value: `4`, Type: "task"},
|
{Name: "max_parallel_transfer", Value: `4`, Type: "task"},
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package aria2
|
package aria2
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
model "github.com/HFO4/cloudreve/models"
|
model "github.com/HFO4/cloudreve/models"
|
||||||
"github.com/HFO4/cloudreve/pkg/serializer"
|
"github.com/HFO4/cloudreve/pkg/serializer"
|
||||||
"github.com/HFO4/cloudreve/pkg/util"
|
"github.com/HFO4/cloudreve/pkg/util"
|
||||||
|
@ -17,7 +18,7 @@ var EventNotifier = &Notifier{}
|
||||||
// Aria2 离线下载处理接口
|
// Aria2 离线下载处理接口
|
||||||
type Aria2 interface {
|
type Aria2 interface {
|
||||||
// CreateTask 创建新的任务
|
// CreateTask 创建新的任务
|
||||||
CreateTask(task *model.Download) error
|
CreateTask(task *model.Download, options []interface{}) error
|
||||||
// 返回状态信息
|
// 返回状态信息
|
||||||
Status(task *model.Download) (rpc.StatusInfo, error)
|
Status(task *model.Download) (rpc.StatusInfo, error)
|
||||||
// 取消任务
|
// 取消任务
|
||||||
|
@ -52,7 +53,8 @@ const (
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// ErrNotEnabled 功能未开启错误
|
// ErrNotEnabled 功能未开启错误
|
||||||
ErrNotEnabled = serializer.NewError(serializer.CodeNoPermissionErr, "离线下载功能未开启", nil)
|
ErrNotEnabled = serializer.NewError(serializer.CodeNoPermissionErr, "离线下载功能未开启", nil)
|
||||||
|
// ErrUserNotFound 未找到下载任务创建者
|
||||||
ErrUserNotFound = serializer.NewError(serializer.CodeNotFound, "无法找到任务创建者", nil)
|
ErrUserNotFound = serializer.NewError(serializer.CodeNotFound, "无法找到任务创建者", nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -61,7 +63,7 @@ type DummyAria2 struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateTask 创建新任务,此处直接返回未开启错误
|
// CreateTask 创建新任务,此处直接返回未开启错误
|
||||||
func (instance *DummyAria2) CreateTask(task *model.Download) error {
|
func (instance *DummyAria2) CreateTask(model *model.Download, options []interface{}) error {
|
||||||
return ErrNotEnabled
|
return ErrNotEnabled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,7 +106,13 @@ func Init() {
|
||||||
server.Path = "/jsonrpc"
|
server.Path = "/jsonrpc"
|
||||||
|
|
||||||
// todo 加载自定义下载配置
|
// todo 加载自定义下载配置
|
||||||
if err := client.Init(server.String(), options["aria2_token"], timeout, []interface{}{}); err != nil {
|
var globalOptions []interface{}
|
||||||
|
err = json.Unmarshal([]byte(options["aria2_options"]), &globalOptions)
|
||||||
|
if err != nil {
|
||||||
|
util.Log().Warning("无法解析 aria2 全局配置,%s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := client.Init(server.String(), options["aria2_token"], timeout, globalOptions); err != nil {
|
||||||
util.Log().Warning("初始化 aria2 RPC 服务失败,%s", err)
|
util.Log().Warning("初始化 aria2 RPC 服务失败,%s", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,7 +78,7 @@ func (client *RPCService) Select(task *model.Download, files []int) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateTask 创建新任务
|
// CreateTask 创建新任务
|
||||||
func (client *RPCService) CreateTask(task *model.Download) error {
|
func (client *RPCService) CreateTask(task *model.Download, groupOptions []interface{}) error {
|
||||||
// 生成存储路径
|
// 生成存储路径
|
||||||
path := filepath.Join(
|
path := filepath.Join(
|
||||||
model.GetSettingByName("aria2_temp_path"),
|
model.GetSettingByName("aria2_temp_path"),
|
||||||
|
@ -89,8 +89,9 @@ func (client *RPCService) CreateTask(task *model.Download) error {
|
||||||
// 创建下载任务
|
// 创建下载任务
|
||||||
options := []interface{}{map[string]string{"dir": path}}
|
options := []interface{}{map[string]string{"dir": path}}
|
||||||
if len(client.options.Options) > 0 {
|
if len(client.options.Options) > 0 {
|
||||||
options = append(options, client.options.Options)
|
options = append(options, client.options.Options...)
|
||||||
}
|
}
|
||||||
|
options = append(options, groupOptions...)
|
||||||
|
|
||||||
gid, err := client.caller.AddURI(task.Source, options...)
|
gid, err := client.caller.AddURI(task.Source, options...)
|
||||||
if err != nil || gid == "" {
|
if err != nil || gid == "" {
|
||||||
|
|
|
@ -41,7 +41,7 @@ func (service *AddURLService) Add(c *gin.Context, taskType int) serializer.Respo
|
||||||
UserID: fs.User.ID,
|
UserID: fs.User.ID,
|
||||||
Source: service.URL,
|
Source: service.URL,
|
||||||
}
|
}
|
||||||
if err := aria2.Instance.CreateTask(task); err != nil {
|
if err := aria2.Instance.CreateTask(task, fs.User.Group.OptionsSerialized.Aria2Options); err != nil {
|
||||||
return serializer.Err(serializer.CodeNotSet, "任务创建失败", err)
|
return serializer.Err(serializer.CodeNotSet, "任务创建失败", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue