mirror of https://github.com/Xhofe/alist
67 lines
1.3 KiB
Go
67 lines
1.3 KiB
Go
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
|
|
}
|