mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
29 lines
1.0 KiB
TypeScript
29 lines
1.0 KiB
TypeScript
export class AudioDownloader {
|
|
progress: (percent: number) => void = null
|
|
sid: number | string
|
|
async getDownloadUrl() {
|
|
const { getJsonWithCredentials } = await import('@/core/ajax')
|
|
const { Toast } = await import('@/core/toast')
|
|
const url = `https://www.bilibili.com/audio/music-service-c/web/url?sid=${this.sid}&privilege=2&quality=2`
|
|
const json = await getJsonWithCredentials(url)
|
|
if (json.code !== 0) {
|
|
Toast.error('获取下载链接失败, 请确保当前账号有下载权限.', '下载音频', 10000)
|
|
return null
|
|
}
|
|
|
|
return json.data.cdns.shift()
|
|
}
|
|
async download() {
|
|
const url = await this.getDownloadUrl()
|
|
return new Promise<Blob>((resolve, reject) => {
|
|
const xhr = new XMLHttpRequest()
|
|
xhr.open('GET', url)
|
|
xhr.responseType = 'blob'
|
|
xhr.addEventListener('load', () => resolve(xhr.response))
|
|
xhr.addEventListener('error', () => reject(xhr.status))
|
|
xhr.addEventListener('progress', e => this.progress?.((100 * e.loaded) / e.total))
|
|
xhr.send()
|
|
})
|
|
}
|
|
}
|