| package tool | |
| import ( | |
| "io" | |
| "os" | |
| "time" | |
| "github.com/alist-org/alist/v3/internal/model" | |
| ) | |
| type AddUrlArgs struct { | |
| Url string | |
| UID string | |
| TempDir string | |
| Signal chan int | |
| } | |
| type Status struct { | |
| Progress float64 | |
| NewGID string | |
| Completed bool | |
| Status string | |
| Err error | |
| } | |
| type Tool interface { | |
| Name() string | |
| // Items return the setting items the tool need | |
| Items() []model.SettingItem | |
| Init() (string, error) | |
| IsReady() bool | |
| // AddURL add an uri to download, return the task id | |
| AddURL(args *AddUrlArgs) (string, error) | |
| // Remove the download if task been canceled | |
| Remove(task *DownloadTask) error | |
| // Status return the status of the download task, if an error occurred, return the error in Status.Err | |
| Status(task *DownloadTask) (*Status, error) | |
| // Run for simple http download | |
| Run(task *DownloadTask) error | |
| } | |
| type GetFileser interface { | |
| // GetFiles return the files of the download task, if nil, means walk the temp dir to get the files | |
| GetFiles(task *DownloadTask) []File | |
| } | |
| type File struct { | |
| // ReadCloser for http client | |
| ReadCloser io.ReadCloser | |
| Name string | |
| Size int64 | |
| Path string | |
| Modified time.Time | |
| } | |
| func (f *File) GetReadCloser() (io.ReadCloser, error) { | |
| if f.ReadCloser != nil { | |
| return f.ReadCloser, nil | |
| } | |
| file, err := os.Open(f.Path) | |
| if err != nil { | |
| return nil, err | |
| } | |
| return file, nil | |
| } | |