mirror of
https://github.com/iptv-org/iptv-org.github.io.git
synced 2025-05-11 17:40:05 -04:00
Create apiClient.js
This commit is contained in:
parent
a3c6402073
commit
ceef93ed00
1 changed files with 52 additions and 0 deletions
52
src/utils/apiClient.js
Normal file
52
src/utils/apiClient.js
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
import axios from 'axios'
|
||||||
|
import cliProgress from 'cli-progress'
|
||||||
|
import numeral from 'numeral'
|
||||||
|
|
||||||
|
export class ApiClient {
|
||||||
|
constructor({ storage }) {
|
||||||
|
this.storage = storage
|
||||||
|
this.client = axios.create({
|
||||||
|
responseType: 'stream'
|
||||||
|
})
|
||||||
|
this.progressBar = new cliProgress.MultiBar({
|
||||||
|
stopOnComplete: true,
|
||||||
|
hideCursor: true,
|
||||||
|
forceRedraw: true,
|
||||||
|
barsize: 36,
|
||||||
|
format(options, params, payload) {
|
||||||
|
const filename = payload.filename.padEnd(18, ' ')
|
||||||
|
const barsize = options.barsize || 40
|
||||||
|
const percent = (params.progress * 100).toFixed(2)
|
||||||
|
const speed = payload.speed ? numeral(payload.speed).format('0.0 b') + '/s' : 'N/A'
|
||||||
|
const total = numeral(params.total).format('0.0 b')
|
||||||
|
const completeSize = Math.round(params.progress * barsize)
|
||||||
|
const incompleteSize = barsize - completeSize
|
||||||
|
const bar =
|
||||||
|
options.barCompleteString && options.barIncompleteString
|
||||||
|
? options.barCompleteString.substr(0, completeSize) +
|
||||||
|
options.barGlue +
|
||||||
|
options.barIncompleteString.substr(0, incompleteSize)
|
||||||
|
: '-'.repeat(barsize)
|
||||||
|
|
||||||
|
return `${filename} [${bar}] ${percent}% | ETA: ${params.eta}s | ${total} | ${speed}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async download(filename) {
|
||||||
|
const stream = await this.storage.createStream(filename)
|
||||||
|
|
||||||
|
const bar = this.progressBar.create(0, 0, { filename })
|
||||||
|
|
||||||
|
this.client
|
||||||
|
.get(`https://iptv-org.github.io/api/${filename}`, {
|
||||||
|
onDownloadProgress({ total, loaded, rate }) {
|
||||||
|
if (total) bar.setTotal(total)
|
||||||
|
bar.update(loaded, { speed: rate })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
response.data.pipe(stream)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue