mirror of
https://github.com/shanmiteko/LotteryAutoScript.git
synced 2026-06-04 21:01:17 +08:00
feat(update): 优先使用代理更新失败时切回去
This commit is contained in:
parent
86e6b7dbc9
commit
dd1b1db76a
@ -2,13 +2,25 @@ const { send } = require('./net/http')
|
|||||||
const { strToJson, download, try_for_each } = require('./utils')
|
const { strToJson, download, try_for_each } = require('./utils')
|
||||||
const { version, checkVersion, log } = require('./utils')
|
const { version, checkVersion, log } = require('./utils')
|
||||||
|
|
||||||
|
const
|
||||||
|
platform = new Map([
|
||||||
|
['win32', 'win'],
|
||||||
|
['linux', 'linux'],
|
||||||
|
['darwin', 'macos']
|
||||||
|
]).get(process.platform),
|
||||||
|
arch = new Map([
|
||||||
|
['x64', 'x64'],
|
||||||
|
['arm', 'armv7'],
|
||||||
|
['arm64', 'arm64']
|
||||||
|
]).get(process.arch);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取下载链接
|
* 获取下载链接
|
||||||
* @param {string} owner
|
* @param {string} owner
|
||||||
* @param {string} repo
|
* @param {string} repo
|
||||||
* @returns {Promise<{ download_url: string[], text: string }>}
|
* @returns {Promise<{ tag_name:string, assets:Object, text:string }>}
|
||||||
*/
|
*/
|
||||||
function getLatestReleaseDownloadUrl(owner, repo) {
|
function getLatestRelease(owner, repo) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
send({
|
send({
|
||||||
url: `https://api.github.com/repos/${owner}/${repo}/releases/latest`,
|
url: `https://api.github.com/repos/${owner}/${repo}/releases/latest`,
|
||||||
@ -19,37 +31,9 @@ function getLatestReleaseDownloadUrl(owner, repo) {
|
|||||||
retry: false
|
retry: false
|
||||||
},
|
},
|
||||||
success: ({ body }) => {
|
success: ({ body }) => {
|
||||||
const { tag_name, assets, body: text } = strToJson(body)
|
const release = strToJson(body);
|
||||||
if (tag_name) {
|
if (release.tag_name) {
|
||||||
if (checkVersion(version) < checkVersion(tag_name)) {
|
resolve(release)
|
||||||
const platform = new Map([
|
|
||||||
['win32', 'win'],
|
|
||||||
['linux', 'linux'],
|
|
||||||
['darwin', 'macos']
|
|
||||||
]).get(process.platform)
|
|
||||||
const arch = new Map([
|
|
||||||
['x64', 'x64'],
|
|
||||||
['arm', 'armv7'],
|
|
||||||
['arm64', 'arm64']
|
|
||||||
]).get(process.arch)
|
|
||||||
if (platform && arch) {
|
|
||||||
try {
|
|
||||||
const download_url = assets
|
|
||||||
.filter(({ name }) => name.includes(platform) && name.includes(arch))
|
|
||||||
.map(({ browser_download_url }) => browser_download_url)
|
|
||||||
if (!download_url.length) {
|
|
||||||
reject(`未找到能在此平台(${process.platform})-(${process.arch})上运行的版本`)
|
|
||||||
}
|
|
||||||
resolve({ download_url, text })
|
|
||||||
} catch (err) {
|
|
||||||
reject(err)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
reject(`未找到能在此平台(${process.platform})-(${process.arch})上运行的版本`)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
reject('当前已是最新版本')
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
reject(body)
|
reject(body)
|
||||||
}
|
}
|
||||||
@ -61,21 +45,48 @@ function getLatestReleaseDownloadUrl(owner, repo) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} releases
|
||||||
|
* @return {boolean}
|
||||||
|
*/
|
||||||
|
function checkPlatform(releases) {
|
||||||
|
return releases.includes(platform)
|
||||||
|
&& releases.includes(arch)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 半自动更新
|
* 半自动更新
|
||||||
*/
|
*/
|
||||||
async function update() {
|
async function update() {
|
||||||
try {
|
try {
|
||||||
const { download_url, text } = await getLatestReleaseDownloadUrl('shanmiteko', 'LotteryAutoScript')
|
const { tag_name, assets, body: text } = await getLatestRelease('shanmiteko', 'LotteryAutoScript')
|
||||||
await try_for_each(download_url.entries(), async ([i, url]) => {
|
if (checkVersion(version) < checkVersion(tag_name)) {
|
||||||
let proxy_url = new URL(url)
|
const download_url = assets
|
||||||
proxy_url.host = 'download.fastgit.org'
|
.filter(({ name }) => checkPlatform(name))
|
||||||
await download(proxy_url.href, `latest_version${i}.zip`)
|
.map(({ browser_download_url }) => browser_download_url)
|
||||||
return false
|
if (download_url.length) {
|
||||||
})
|
const proxy_host = ['download.fastgit.org']
|
||||||
|
await try_for_each(download_url.entries(), async ([i, url]) => {
|
||||||
log.info('自动下载', '成功下载到当前目录')
|
let proxy_url = new URL(url)
|
||||||
log.info('更新说明', '\n' + text + '\n')
|
proxy_url.host = proxy_host[0]
|
||||||
|
log.warn('自动下载', `切换代理${proxy_host[0]}`)
|
||||||
|
await download(proxy_url.href, `latest_version${i}.zip`)
|
||||||
|
.catch(async err => {
|
||||||
|
log.error('自动下载', err)
|
||||||
|
proxy_url.host = 'github.com'
|
||||||
|
log.warn('自动下载', `使用原始链接github.com`)
|
||||||
|
await download(proxy_url.href, `latest_version${i}.zip`)
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
log.info('自动下载', '成功下载到当前目录')
|
||||||
|
log.info('更新说明', '\n' + text + '\n')
|
||||||
|
} else {
|
||||||
|
throw `未找到能在此平台(${process.platform})-(${process.arch})上运行的版本,建议以源码运行`
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw '当前已是最新版本'
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log.error('更新脚本', error)
|
log.error('更新脚本', error)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -248,12 +248,13 @@ const utils = {
|
|||||||
redirect: true,
|
redirect: true,
|
||||||
retry: false
|
retry: false
|
||||||
},
|
},
|
||||||
success: ({ resStream }) => {
|
success: ({ headers, resStream }) => {
|
||||||
|
const total_len = Number(headers["content-length"]);
|
||||||
let recv_length = 0;
|
let recv_length = 0;
|
||||||
const wtbs = fs.createWriteStream(file_name);
|
const wtbs = fs.createWriteStream(file_name);
|
||||||
resStream.on('data', chuck => {
|
resStream.on('data', chuck => {
|
||||||
recv_length += chuck.length
|
recv_length += chuck.length
|
||||||
utils.log.proPrint(`已收到:${recv_length} Bytes`)
|
utils.log.proPrint(total_len ? `已下载${(recv_length * 100 / total_len + '').slice(0, 5)}%` : `已收到:${recv_length} Bytes`)
|
||||||
})
|
})
|
||||||
resStream.pipe(wtbs)
|
resStream.pipe(wtbs)
|
||||||
wtbs.on('finish', () => {
|
wtbs.on('finish', () => {
|
||||||
@ -261,7 +262,7 @@ const utils = {
|
|||||||
resolve()
|
resolve()
|
||||||
}).on('error', error => {
|
}).on('error', error => {
|
||||||
wtbs.destroy()
|
wtbs.destroy()
|
||||||
resolve(error)
|
reject(error)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
failure: error => {
|
failure: error => {
|
||||||
|
|||||||
2
main.js
2
main.js
@ -88,7 +88,7 @@ async function main() {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.error('Cookie已失效', '切换账号时不要点击退出账号而应直接删除Cookie退出')
|
log.error('Cookie已失效', '切换账号时不要点击退出账号而应直接删除Cookie退出')
|
||||||
return ''
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return '请查看README文件, 在env.js指定位置填入cookie'
|
return '请查看README文件, 在env.js指定位置填入cookie'
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user