const crypto = require('crypto') const os = require('os') const path = require('path') const axios = require('axios') const fs = require('fs-extra') const pkg = require('../package.json') const version = pkg.version const x64URL = `https://release.piclist.cn/latest/PicList-${version}-x64.dmg` const arm64URL = `https://release.piclist.cn/latest/PicList-${version}-arm64.dmg` const x64Path = path.join(os.homedir(), 'Downloads', 'PicList-x64.dmg') const arm64Path = path.join(os.homedir(), 'Downloads', 'PicList-arm64.dmg') const downloadAndHash = async (url, path) => { try { const response = await axios({ method: 'get', url, responseType: 'stream' }) const writer = fs.createWriteStream(path) response.data.pipe(writer) const hash = crypto.createHash('sha256') const progressTotal = parseInt(response.headers['content-length'], 10) let progressCurrent = 0 console.log('\n') response.data.on('data', (chunk) => { hash.update(chunk) progressCurrent += chunk.length const progressBar = Math.round(progressCurrent / progressTotal * 100) process.stdout.write(`\r${progressBar}% ${path}`) }) await new Promise((resolve, reject) => { response.data.on('end', () => { resolve() }) response.data.on('error', (err) => { reject(err) }) }) console.log(`\n${path} SHA256: ${hash.digest('hex')}`) await fs.remove(path) console.log(`Deleted ${path}`) } catch (err) { console.error(`\nError downloading ${url}: ${err.message}`) } } downloadAndHash(x64URL, x64Path).then(() => { downloadAndHash(arm64URL, arm64Path) }).catch(() => { downloadAndHash(arm64URL, arm64Path) })