82 lines
2.2 KiB
JavaScript
82 lines
2.2 KiB
JavaScript
import Downloader from './Downloader'
|
|
// import { pauseResumeTimer } from './util'
|
|
import { sizeFormate, getProxyInfo } from '../index'
|
|
import { debugDownload } from '../env'
|
|
|
|
// these are the default options
|
|
// const options = {
|
|
// method: 'GET', // Request Method Verb
|
|
// // Custom HTTP Header ex: Authorization, User-Agent
|
|
// headers: {},
|
|
// fileName: '', // Custom filename when saved
|
|
// override: false, // if true it will override the file, otherwise will append '(number)' to the end of file
|
|
// forceResume: false, // If the server does not return the "accept-ranges" header, can be force if it does support it
|
|
// // httpRequestOptions: {}, // Override the http request options
|
|
// // httpsRequestOptions: {}, // Override the https request options, ex: to add SSL Certs
|
|
// }
|
|
|
|
export default ({
|
|
url,
|
|
path,
|
|
fileName,
|
|
method = 'get',
|
|
headers,
|
|
forceResume,
|
|
// resumeTime = 5000,
|
|
onCompleted = () => {},
|
|
onError = () => {},
|
|
onFail = () => {},
|
|
onStart = () => {},
|
|
onStop = () => {},
|
|
onProgress = () => {},
|
|
} = {}) => {
|
|
const dl = new Downloader(url, path, fileName, {
|
|
requestOptions: {
|
|
method,
|
|
headers,
|
|
proxy: getProxyInfo(),
|
|
},
|
|
|
|
forceResume,
|
|
})
|
|
|
|
dl.on('completed', () => {
|
|
onCompleted()
|
|
debugDownload && console.log('Download Completed')
|
|
}).on('error', err => {
|
|
if (err.message === 'socket hang up') return
|
|
onError(err)
|
|
debugDownload && console.error('Something happend', err)
|
|
}).on('start', () => {
|
|
onStart()
|
|
// pauseResumeTimer(dl, resumeTime)
|
|
}).on('progress', stats => {
|
|
const progress = stats.progress.toFixed(2)
|
|
const speed = sizeFormate(stats.speed)
|
|
onProgress({
|
|
progress,
|
|
speed,
|
|
downloaded: stats.downloaded,
|
|
total: stats.total,
|
|
})
|
|
if (debugDownload) {
|
|
const downloaded = sizeFormate(stats.downloaded)
|
|
const total = sizeFormate(stats.total)
|
|
console.log(`${speed}/s - ${progress}% [${downloaded}/${total}]`)
|
|
}
|
|
}).on('stop', () => {
|
|
onStop()
|
|
debugDownload && console.log('paused')
|
|
}).on('fail', resp => {
|
|
onFail(resp)
|
|
debugDownload && console.log('fail')
|
|
})
|
|
|
|
debugDownload && console.log('Downloading: ', url)
|
|
|
|
dl.start()
|
|
|
|
return dl
|
|
}
|
|
|