diff --git a/lib/update.js b/lib/update.js index 4aa0e33..2109c26 100644 --- a/lib/update.js +++ b/lib/update.js @@ -62,21 +62,24 @@ async function update(isDdownload) { try { const { tag_name, assets, body: text } = await getLatestRelease('shanmiteko', 'LotteryAutoScript'); if (checkVersion(version) < checkVersion(tag_name)) { - const download_url = assets + /** + * @type {{browser_download_url:string, size:number}[]} + */ + const download_item = assets .filter(({ name }) => checkPlatform(name)) - .map(({ browser_download_url }) => browser_download_url); - if (download_url.length) { + .map(({ browser_download_url, size }) => { return { browser_download_url, size }; }); + if (download_item.length) { if (isDdownload) { - await try_for_each(download_url.entries(), async ([i, url]) => { - let proxy_url = 'https://mirror.ghproxy.com/'; - proxy_url += url; + await try_for_each(download_item.entries(), async ([i, { browser_download_url, size }]) => { + let proxy_url = 'https://ghfast.top/'; + proxy_url += browser_download_url; log.warn('自动下载', `切换代理${proxy_url}`); - await download(proxy_url, `latest_version${i}.zip`) + await download(proxy_url, `latest_version${i}.zip`, size) .catch(async err => { log.error('自动下载', err); - proxy_url = url; + proxy_url = browser_download_url; log.warn('自动下载', `使用原始链接${proxy_url}`); - await download(proxy_url, `latest_version${i}.zip`); + await download(proxy_url, `latest_version${i}.zip`, size); }); return false; }); diff --git a/lib/utils.js b/lib/utils.js index 89d0a0e..08ad090 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -318,9 +318,10 @@ const utils = { * 下载文件 * @param {string} url * @param {string} file_name + * @param {number} size * @returns {Promise} */ - download(url, file_name) { + download(url, file_name, size) { return new Promise((resolve, reject) => { send({ url, @@ -340,6 +341,9 @@ const utils = { resStream.pipe(wtbs); wtbs.on('finish', () => { utils.log.proPrint('下载完成'); + if (recv_length < size) { + reject(`未正确下载文件: ${recv_length}B < ${size}B`); + } resolve(); }).on('error', error => { wtbs.destroy();