You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.8 KiB
76 lines
1.8 KiB
5 years ago
|
package aria2
|
||
|
|
||
|
import (
|
||
|
model "github.com/HFO4/cloudreve/models"
|
||
|
"github.com/HFO4/cloudreve/pkg/serializer"
|
||
|
"github.com/HFO4/cloudreve/pkg/util"
|
||
|
"net/url"
|
||
|
)
|
||
|
|
||
|
// Instance 默认使用的Aria2处理实例
|
||
|
var Instance Aria2 = &DummyAria2{}
|
||
|
|
||
|
// Aria2 离线下载处理接口
|
||
|
type Aria2 interface {
|
||
|
// CreateTask 创建新的任务
|
||
|
CreateTask(task *model.Download) error
|
||
|
}
|
||
|
|
||
|
const (
|
||
|
// URLTask 从URL添加的任务
|
||
|
URLTask = iota
|
||
|
// TorrentTask 种子任务
|
||
|
TorrentTask
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
// Ready 准备就绪
|
||
|
Ready = iota
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
// ErrNotEnabled 功能未开启错误
|
||
|
ErrNotEnabled = serializer.NewError(serializer.CodeNoPermissionErr, "离线下载功能未开启", nil)
|
||
|
)
|
||
|
|
||
|
// DummyAria2 未开启Aria2功能时使用的默认处理器
|
||
|
type DummyAria2 struct {
|
||
|
}
|
||
|
|
||
|
// CreateTask 创建新任务,此处直接返回未开启错误
|
||
|
func (instance *DummyAria2) CreateTask(task *model.Download) error {
|
||
|
return ErrNotEnabled
|
||
|
}
|
||
|
|
||
|
// Init 初始化
|
||
|
func Init() {
|
||
|
options := model.GetSettingByNames("aria2_rpcurl", "aria2_token", "aria2_options")
|
||
|
timeout := model.GetIntSetting("aria2_call_timeout", 5)
|
||
|
if options["aria2_rpcurl"] == "" {
|
||
|
// 未开启Aria2服务
|
||
|
return
|
||
|
}
|
||
|
|
||
|
util.Log().Info("初始化 aria2 RPC 服务[%s]", options["aria2_rpcurl"])
|
||
|
client := &RPCService{}
|
||
|
if previousClient, ok := Instance.(*RPCService); ok {
|
||
|
client = previousClient
|
||
|
}
|
||
|
|
||
|
// 解析RPC服务地址
|
||
|
server, err := url.Parse(options["aria2_rpcurl"])
|
||
|
if err != nil {
|
||
|
util.Log().Warning("无法解析 aria2 RPC 服务地址,%s", err)
|
||
|
return
|
||
|
}
|
||
|
server.Path = "/jsonrpc"
|
||
|
|
||
|
// todo 加载自定义下载配置
|
||
|
if err := client.Init(server.String(), options["aria2_token"], timeout, []interface{}{}); err != nil {
|
||
|
util.Log().Warning("初始化 aria2 RPC 服务失败,%s", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
Instance = client
|
||
|
}
|