12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package fetcher
- import (
- "git.bvbej.com/bvbej/base-golang/pkg/downloader/base"
- "git.bvbej.com/bvbej/base-golang/pkg/downloader/controller"
- )
- // Fetcher 对应协议的下载支持
- type Fetcher interface {
- // Setup 设置文件相关信息
- Setup(ctl controller.Controller)
- // Resolve 解析请求
- Resolve(req *base.Request) (res *base.Resource, err error)
- // Create 创建任务
- Create(res *base.Resource, opts *base.Options) (err error)
- // Start 开始
- Start() (err error)
- // Pause 暂停
- Pause() (err error)
- // Continue 继续
- Continue() (err error)
- // Progress 获取任务各个文件下载进度
- Progress() Progress
- // Wait 该方法会一直阻塞,直到任务下载结束
- Wait() (err error)
- }
- type DefaultFetcher struct {
- Ctl controller.Controller
- DoneCh chan error
- }
- func (f *DefaultFetcher) Setup(ctl controller.Controller) {
- f.Ctl = ctl
- f.DoneCh = make(chan error, 1)
- }
- func (f *DefaultFetcher) Wait() (err error) {
- return <-f.DoneCh
- }
- // Progress 获取任务中各个文件的已下载字节数
- type Progress []int64
- // TotalDownloaded 获取任务总下载字节数
- func (p Progress) TotalDownloaded() int64 {
- total := int64(0)
- for _, d := range p {
- total += d
- }
- return total
- }
|