From d007d8bab9c87e6d2a5d4ca3de3d55062e297c2e Mon Sep 17 00:00:00 2001 From: shanmite Date: Fri, 23 May 2025 09:33:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E6=8D=A2=E6=BA=90?= =?UTF-8?q?=E5=8F=8A=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/update.js | 21 ++++++++++++--------- lib/utils.js | 6 +++++- 2 files changed, 17 insertions(+), 10 deletions(-) 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();