Исправление багов

This commit is contained in:
Book Pauk
2022-08-05 02:25:45 +07:00
parent 5dead039f5
commit f8557cba88
2 changed files with 22 additions and 6 deletions

View File

@@ -259,9 +259,8 @@ class BUCServer {
try {
let unchanged = true;
let hash = '';
log(`head ${row.id}`)
const headers = await this.down.head(row.id);
log(`headers ${row.id}: ${JSON.stringify(headers)}`)
const etag = headers['etag'] || '';
const modTime = headers['last-modified'] || '';
@@ -274,9 +273,8 @@ log(`headers ${row.id}: ${JSON.stringify(headers)}`)
&& (!modTime || !row.modTime || (modTime !== row.modTime))
&& (!size || !row.size || (size !== row.size))
) {
log(`down ${row.id}`)
const downdata = await this.down.load(row.id);
log(`loaded ${row.id}`)
size = downdata.length;
hash = await utils.getBufHash(downdata, 'sha256', 'hex');

View File

@@ -1,4 +1,5 @@
const axios = require('axios');
const utils = require('./utils');
const userAgent = 'Mozilla/5.0 (X11; HasCodingOs 1.0; Linux x64) AppleWebKit/637.36 (KHTML, like Gecko) Chrome/70.0.3112.101 Safari/637.36 HasBrowser/5.0';
@@ -77,25 +78,42 @@ class FileDownloader {
return res.headers;
}
streamToBuffer(stream, progress) {
streamToBuffer(stream, progress, timeout = 30*1000) {
return new Promise((resolve, reject) => {
if (!progress)
progress = () => {};
const _buf = [];
let resolved = false;
let timer = 0;
stream.on('data', (chunk) => {
timer = 0;
_buf.push(chunk);
progress(chunk);
});
stream.on('end', () => resolve(Buffer.concat(_buf)));
stream.on('end', () => {
resolved = true;
timer = timeout;
resolve(Buffer.concat(_buf));
});
stream.on('error', (err) => {
reject(err);
});
stream.on('aborted', () => {
reject(new Error('aborted'));
});
//бодяга с timer и timeout, чтобы гарантировать отсутствие зависания по каким-либо причинам
(async() => {
while (timer < timeout) {
await utils.sleep(1000);
timer += 1000;
}
if (!resolved)
reject(new Error('FileDownloader: timed out'))
})();
});
}
}