diff --git a/src/updater/moduleUpdater.js b/src/updater/moduleUpdater.js index 6c9e013..52a27ea 100644 --- a/src/updater/moduleUpdater.js +++ b/src/updater/moduleUpdater.js @@ -5,7 +5,7 @@ const Module = require('module'); const { execFile } = require('child_process'); const paths = require('../paths'); -const request = require('./request'); +const request = require('request'); const events = exports.events = new (require('events').EventEmitter)(); exports.INSTALLED_MODULE = 'installed-module'; // Fixes DiscordNative ensureModule as it uses export @@ -134,15 +134,14 @@ const checkModules = async () => { hostAvail = false; try { - const { body } = await request.get({ + remote = await new Promise((res) => request({ url: baseUrl + '/versions.json', qs - }); + }, (e, r, b) => res(JSON.parse(b)))); checking = false; - - remote = JSON.parse(body); } catch (e) { + checking = false; log('Modules', 'Check failed', e); return events.emit('update-check-finished', { @@ -181,26 +180,24 @@ const downloadModule = async (name, ver) => { const path = join(downloadPath, name + '-' + ver + '.zip'); const stream = fs.createWriteStream(path); - stream.on('progress', ([ cur, total ]) => events.emit('downloading-module-progress', { - name, - cur, - total - })); + // log('Modules', 'Downloading', `${name}@${ver}`); - log('Modules', 'Downloading', `${name}@${ver}`); + let success, total, cur = 0; + request({ url, qs }).on('response', (res) => { + success = res.statusCode === 200; + total = parseInt(res.headers['content-length'] ?? 1, 10); - let success = false; - try { - const resp = await request.get({ - url, - qs, - stream + res.pipe(stream); + + res.on('data', c => { + cur += c.length; + + events.emit('downloading-module-progress', { name, cur, total }); }); + }); + + await new Promise((res) => stream.on('close', res)); - success = resp.statusCode === 200; - } catch (e) { - log('Modules', 'Fetch errored', e); - } if (!installed[name]) installed[name] = {}; diff --git a/src/updater/request.js b/src/updater/request.js deleted file mode 100644 index 1db89a4..0000000 --- a/src/updater/request.js +++ /dev/null @@ -1,41 +0,0 @@ -const request = require('request'); - -const nodeRequest = (opts) => new Promise((resolve, reject) => { - const { stream, timeout } = opts; - - const req = request({ ...opts, timeout: timeout ?? 15000 }); - - req.on('response', (response) => { - const total = parseInt(response.headers['content-length'] || 1, 10); - let outOf = 0; - const chunks = []; - - const badStatus = response.statusCode >= 300; - if (badStatus) stream = null; - - response.on('data', chunk => { - chunks.push(chunk); - - if (!stream) return; - outOf += chunk.length; - stream.write(chunk); - stream.emit('progress', [ outOf, total ]); - }); - - response.on('end', () => { - if (stream != null) { - stream.on('finish', () => resolve(response)); - return stream.end(); - } - - if (badStatus) return reject(new Error('Req fail')); - - resolve({ ...response, body: Buffer.concat(chunks) }); - }); - }); - - req.on('error', err => reject(err)); -}); - -const meth = (method, opt) => nodeRequest({ ...(typeof opt === 'string' ? { url: opt } : opt), method }); -exports.get = meth.bind(null, 'GET'); \ No newline at end of file