github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/aria2/common/common.go (about) 1 package common 2 3 import ( 4 model "github.com/cloudreve/Cloudreve/v3/models" 5 "github.com/cloudreve/Cloudreve/v3/pkg/aria2/rpc" 6 "github.com/cloudreve/Cloudreve/v3/pkg/serializer" 7 ) 8 9 // Aria2 离线下载处理接口 10 type Aria2 interface { 11 // Init 初始化客户端连接 12 Init() error 13 // CreateTask 创建新的任务 14 CreateTask(task *model.Download, options map[string]interface{}) (string, error) 15 // 返回状态信息 16 Status(task *model.Download) (rpc.StatusInfo, error) 17 // 取消任务 18 Cancel(task *model.Download) error 19 // 选择要下载的文件 20 Select(task *model.Download, files []int) error 21 // 获取离线下载配置 22 GetConfig() model.Aria2Option 23 // 删除临时下载文件 24 DeleteTempFile(*model.Download) error 25 } 26 27 const ( 28 // URLTask 从URL添加的任务 29 URLTask = iota 30 // TorrentTask 种子任务 31 TorrentTask 32 ) 33 34 const ( 35 // Ready 准备就绪 36 Ready = iota 37 // Downloading 下载中 38 Downloading 39 // Paused 暂停中 40 Paused 41 // Error 出错 42 Error 43 // Complete 完成 44 Complete 45 // Canceled 取消/停止 46 Canceled 47 // Unknown 未知状态 48 Unknown 49 // Seeding 做种中 50 Seeding 51 ) 52 53 var ( 54 // ErrNotEnabled 功能未开启错误 55 ErrNotEnabled = serializer.NewError(serializer.CodeFeatureNotEnabled, "not enabled", nil) 56 // ErrUserNotFound 未找到下载任务创建者 57 ErrUserNotFound = serializer.NewError(serializer.CodeUserNotFound, "", nil) 58 ) 59 60 // DummyAria2 未开启Aria2功能时使用的默认处理器 61 type DummyAria2 struct { 62 } 63 64 func (instance *DummyAria2) Init() error { 65 return nil 66 } 67 68 // CreateTask 创建新任务,此处直接返回未开启错误 69 func (instance *DummyAria2) CreateTask(model *model.Download, options map[string]interface{}) (string, error) { 70 return "", ErrNotEnabled 71 } 72 73 // Status 返回未开启错误 74 func (instance *DummyAria2) Status(task *model.Download) (rpc.StatusInfo, error) { 75 return rpc.StatusInfo{}, ErrNotEnabled 76 } 77 78 // Cancel 返回未开启错误 79 func (instance *DummyAria2) Cancel(task *model.Download) error { 80 return ErrNotEnabled 81 } 82 83 // Select 返回未开启错误 84 func (instance *DummyAria2) Select(task *model.Download, files []int) error { 85 return ErrNotEnabled 86 } 87 88 // GetConfig 返回空的 89 func (instance *DummyAria2) GetConfig() model.Aria2Option { 90 return model.Aria2Option{} 91 } 92 93 // GetConfig 返回空的 94 func (instance *DummyAria2) DeleteTempFile(src *model.Download) error { 95 return ErrNotEnabled 96 } 97 98 // GetStatus 将给定的状态字符串转换为状态标识数字 99 func GetStatus(status rpc.StatusInfo) int { 100 switch status.Status { 101 case "complete": 102 return Complete 103 case "active": 104 if status.BitTorrent.Mode != "" && status.CompletedLength == status.TotalLength { 105 return Seeding 106 } 107 return Downloading 108 case "waiting": 109 return Ready 110 case "paused": 111 return Paused 112 case "error": 113 return Error 114 case "removed": 115 return Canceled 116 default: 117 return Unknown 118 } 119 }