mirror of
https://git.mirrors.martin98.com/https://github.com/sub-store-org/Sub-Store.git
synced 2025-08-03 03:40:39 +08:00
45 lines
1.2 KiB
JavaScript
45 lines
1.2 KiB
JavaScript
import { HTTP } from '@/vendor/open-api';
|
||
import { hex_md5 } from '@/vendor/md5';
|
||
import resourceCache from '@/utils/resource-cache';
|
||
|
||
const tasks = new Map();
|
||
|
||
export default async function download(url, ua) {
|
||
ua = ua || 'Quantumult%20X/1.0.29 (iPhone14,5; iOS 15.4.1)';
|
||
const id = hex_md5(ua + url);
|
||
if (tasks.has(id)) {
|
||
return tasks.get(id);
|
||
}
|
||
|
||
const http = HTTP({
|
||
headers: {
|
||
'User-Agent': ua,
|
||
},
|
||
});
|
||
|
||
const result = new Promise((resolve, reject) => {
|
||
// try to find in app cache
|
||
const cached = resourceCache.get(id);
|
||
if (cached) {
|
||
resolve(cached);
|
||
} else {
|
||
http.get(url)
|
||
.then((resp) => {
|
||
const body = resp.body;
|
||
if (body.replace(/\s/g, '').length === 0)
|
||
reject(new Error('远程资源内容为空!'));
|
||
else {
|
||
resourceCache.set(id, body);
|
||
resolve(body);
|
||
}
|
||
})
|
||
.catch(() => {
|
||
reject(new Error(`无法下载 URL:${url}`));
|
||
});
|
||
}
|
||
});
|
||
|
||
tasks.set(id, result);
|
||
return result;
|
||
}
|