Versions in this module Expand all Collapse all v1 v1.0.3 May 3, 2020 v1.0.2 May 2, 2020 Changes in this version + const CacheSize + const DefaultAcceptRanges + const InstanceStateStorageFormatJSON + const InstanceStateStorageFormatProto3 + var ContentRangeRE = regexp.MustCompile(`^.*? \d*?-\d*?/(\d*?)$`) + var ErrNoWokers = errors.New("no workers") + var MinParallelSize int64 = 128 * 1024 + func DefaultDURLCheckFunc(client *requester.HTTPClient, durl string) (contentLength int64, resp *http.Response, err error) + func DefaultLoadBalancerCompareFunc(info map[string]string, subResp *http.Response) bool + func DoDownload(durl string, savePath string, cfg *Config) + func GetFileName(uri string, client *requester.HTTPClient) (filename string, err error) + func GetStatusText(sc StatusCode) string + func ParseContentRange(contentRange string) (contentLength int64) + func RandomNumber(min, max int) int + type ByLeftDesc struct + func (wl ByLeftDesc) Less(i, j int) bool + type Config struct + BlockSize int64 + CacheSize int + InstanceStatePath string + InstanceStateStorageFormat InstanceStateStorageFormat + IsTest bool + MaxParallel int + MaxRate int64 + Mode transfer.RangeGenMode + TryHTTP bool + func NewConfig() *Config + func (cfg *Config) Copy() *Config + func (cfg *Config) Fix() + type DURLCheckFunc func(client *requester.HTTPClient, durl string) (contentLength int64, resp *http.Response, err error) + type DownloadFirstInfo struct + AcceptRanges string + ContentCRC32 string + ContentLength int64 + ContentMD5 string + Referer string + func NewDownloadFirstInfoByResp(contentLength int64, resp *http.Response) (dfi *DownloadFirstInfo) + func (dfi *DownloadFirstInfo) Compare(n *DownloadFirstInfo) bool + func (dfi *DownloadFirstInfo) ToMap() map[string]string + func (dfi *DownloadFirstInfo) ToMapByReflect() map[string]string + type DownloadStatusFunc func(status transfer.DownloadStatuser, workersCallback func(RangeWorkerFunc)) + type Downloader struct + func NewDownloader(durl string, writer io.WriterAt, config *Config) (der *Downloader) + func (der *Downloader) AddLoadBalanceServer(urls ...string) + func (der *Downloader) Cancel() + func (der *Downloader) Execute() error + func (der *Downloader) OnCancel(onCancelEvent requester.Event) + func (der *Downloader) OnDownloadStatusEvent(f DownloadStatusFunc) + func (der *Downloader) OnExecute(onExecuteEvent requester.Event) + func (der *Downloader) OnFinish(onFinishEvent requester.Event) + func (der *Downloader) OnPause(onPauseEvent requester.Event) + func (der *Downloader) OnResume(onResumeEvent requester.Event) + func (der *Downloader) OnSuccess(onSuccessEvent requester.Event) + func (der *Downloader) Pause() + func (der *Downloader) Resume() + func (der *Downloader) SelectBlockSizeAndInitRangeGen(single bool, status *transfer.DownloadStatus, parallel int) (blockSize int64, initErr error) + func (der *Downloader) SelectCacheSize(confCacheSize int, blockSize int64) (cacheSize int) + func (der *Downloader) SelectParallel(single bool, maxParallel int, totalSize int64, ...) (parallel int) + func (der *Downloader) SetClient(client *requester.HTTPClient) + func (der *Downloader) SetDURLCheckFunc(f DURLCheckFunc) + func (der *Downloader) SetFirstInfo(i *DownloadFirstInfo) + func (der *Downloader) SetLoadBalancerCompareFunc(f LoadBalancerCompareFunc) + func (der *Downloader) SetStatusCodeBodyCheckFunc(f StatusCodeBodyCheckFunc) + type Fder interface + Fd func() uintptr + type InstanceState struct + func NewInstanceState(saveFile *os.File, format InstanceStateStorageFormat) *InstanceState + func (is *InstanceState) Close() error + func (is *InstanceState) Get() (eii *transfer.DownloadInstanceInfo) + func (is *InstanceState) Put(eii *transfer.DownloadInstanceInfo) + type InstanceStateStorageFormat int + type LoadBalancerCompareFunc func(info map[string]string, subResp *http.Response) bool + type LoadBalancerResponse struct + Referer string + URL string + type LoadBalancerResponseList struct + func NewLoadBalancerResponseList(lbr []*LoadBalancerResponse) *LoadBalancerResponseList + func (lbrl *LoadBalancerResponseList) RandomGet() *LoadBalancerResponse + func (lbrl *LoadBalancerResponseList) SequentialGet() *LoadBalancerResponse + type Monitor struct + func NewMonitor() *Monitor + func (mt *Monitor) Append(worker *Worker) + func (mt *Monitor) CompletedChan() <-chan struct{} + func (mt *Monitor) DynamicSplitWorker(worker *Worker) + func (mt *Monitor) Err() error + func (mt *Monitor) Execute(cancelCtx context.Context) + func (mt *Monitor) GetAllWorkersRange() transfer.RangeList + func (mt *Monitor) GetAvailableWorker() *Worker + func (mt *Monitor) InitMonitorCapacity(capacity int) + func (mt *Monitor) IsLeftWorkersAllFailed() bool + func (mt *Monitor) NumLeftWorkers() (num int) + func (mt *Monitor) Pause() + func (mt *Monitor) RangeWorker(f RangeWorkerFunc) + func (mt *Monitor) ResetFailedAndNetErrorWorkers() + func (mt *Monitor) ResetWorker(worker *Worker) + func (mt *Monitor) Resume() + func (mt *Monitor) SetInstanceState(instanceState *InstanceState) + func (mt *Monitor) SetReloadWorker(b bool) + func (mt *Monitor) SetStatus(status *transfer.DownloadStatus) + func (mt *Monitor) SetWorkers(workers WorkerList) + func (mt *Monitor) Status() *transfer.DownloadStatus + func (mt *Monitor) TryAddNewWork() + type RangeWorkerFunc func(key int, worker *Worker) bool + type ResetController struct + func NewResetController(maxResetNum int) *ResetController + func (rc *ResetController) AddResetNum() + func (rc *ResetController) CanReset() bool + type StatusCode int + const StatusCodeCanceled + const StatusCodeDownloading + const StatusCodeFailed + const StatusCodeInit + const StatusCodeInternalError + const StatusCodeNetError + const StatusCodePaused + const StatusCodePending + const StatusCodeReseted + const StatusCodeSuccessed + const StatusCodeTooManyConnections + const StatusCodeWaitToWrite + type StatusCodeBodyCheckFunc func(respBody io.Reader) error + type Worker struct + func NewWorker(id int, durl string, writerAt io.WriterAt) *Worker + func (wer *Worker) Cancel() error + func (wer *Worker) Canceled() bool + func (wer *Worker) ClearStatus() + func (wer *Worker) Completed() bool + func (wer *Worker) Err() error + func (wer *Worker) Execute() + func (wer *Worker) Failed() bool + func (wer *Worker) GetRange() *transfer.Range + func (wer *Worker) GetSpeedsPerSecond() int64 + func (wer *Worker) GetStatus() WorkerStatuser + func (wer *Worker) ID() int + func (wer *Worker) Pause() + func (wer *Worker) Reset() + func (wer *Worker) Resume() + func (wer *Worker) SetAcceptRange(acceptRanges string) + func (wer *Worker) SetClient(c *requester.HTTPClient) + func (wer *Worker) SetDownloadStatus(downloadStatus *transfer.DownloadStatus) + func (wer *Worker) SetRange(r *transfer.Range) + func (wer *Worker) SetReferer(referer string) + func (wer *Worker) SetTotalSize(size int64) + func (wer *Worker) SetWriteMutex(mu *sync.Mutex) + type WorkerList []*Worker + func (wl WorkerList) Duplicate() WorkerList + func (wl WorkerList) Len() int + func (wl WorkerList) Swap(i, j int) + type WorkerStatus struct + func NewWorkerStatus() *WorkerStatus + func (ws *WorkerStatus) SetStatusCode(sc StatusCode) + func (ws *WorkerStatus) StatusCode() StatusCode + func (ws *WorkerStatus) StatusText() string + type WorkerStatuser interface + StatusCode func() StatusCode + StatusText func() string + type Writer interface + func NewDownloaderWriterByFilename(name string, flag int, perm os.FileMode) (writer Writer, file *os.File, err error)