1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
require('dotenv').config();
const blake3 = require('blake3');
const path = require('path');
const fs = require('fs');
const db = require('knex')({
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '../../../database/', 'database.sqlite')
}
});
const start = async () => {
const hrstart = process.hrtime();
const uploads = await db.table('files')
.select('id', 'name', 'hash');
console.log(`Uploads : ${uploads.length}`);
let done = 0;
const printProgress = () => {
console.log(`PROGRESS: ${done}/${uploads.length}`);
if (done >= uploads.length) clearInterval(progressInterval); // eslint-disable-line no-use-before-define
};
const progressInterval = setInterval(printProgress, 1000);
printProgress();
for (const upload of uploads) {
await new Promise((resolve, reject) => {
fs.createReadStream(path.join(__dirname, '../../../uploads', upload.name))
.on('error', reject)
.pipe(blake3.createHash())
.on('error', reject)
.on('data', async source => {
const hash = source.toString('hex');
console.log(`${upload.name}: ${hash}`);
await db.table('files')
.update('hash', hash)
.where('id', upload.id);
done++;
resolve();
});
}).catch(error => {
console.log(`${upload.name}: ${error.toString()}`);
});
}
clearInterval(progressInterval);
printProgress();
const hrend = process.hrtime(hrstart);
console.log(`Done in : ${(hrend[0] + (hrend[1] / 1e9)).toFixed(4)}s`);
process.exit(0);
};
start();
|