Commit iniziale
This commit is contained in:
52
services/zipProcessor.js
Normal file
52
services/zipProcessor.js
Normal file
@@ -0,0 +1,52 @@
|
||||
const unzipper = require('unzipper');
|
||||
const fs = require('fs-extra');
|
||||
const path = require('path');
|
||||
const { pipeline } = require('stream/promises');
|
||||
const { findDestination, isCadFile } = require('./router');
|
||||
|
||||
async function processZip(zipPath, config) {
|
||||
const stream = fs.createReadStream(zipPath).pipe(unzipper.Parse({ forceStream: true }));
|
||||
const result = {
|
||||
scanned: 0,
|
||||
copied: 0,
|
||||
skipped: 0,
|
||||
details: [],
|
||||
};
|
||||
|
||||
for await (const entry of stream) {
|
||||
if (entry.type !== 'File') {
|
||||
entry.autodrain();
|
||||
continue;
|
||||
}
|
||||
|
||||
const file = entry.path;
|
||||
const baseName = path.basename(file);
|
||||
result.scanned += 1;
|
||||
|
||||
if (!isCadFile(baseName)) {
|
||||
result.skipped += 1;
|
||||
entry.autodrain();
|
||||
continue;
|
||||
}
|
||||
|
||||
const destDir = findDestination(baseName, config);
|
||||
|
||||
if (!destDir) {
|
||||
result.skipped += 1;
|
||||
result.details.push({ file: baseName, reason: 'Nessuna regola trovata' });
|
||||
entry.autodrain();
|
||||
continue;
|
||||
}
|
||||
|
||||
await fs.ensureDir(destDir);
|
||||
const dest = path.join(destDir, baseName);
|
||||
await pipeline(entry, fs.createWriteStream(dest));
|
||||
|
||||
result.copied += 1;
|
||||
result.details.push({ file: baseName, destination: destDir });
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = { processZip };
|
||||
Reference in New Issue
Block a user