64 lines
No EOL
1.8 KiB
JavaScript
64 lines
No EOL
1.8 KiB
JavaScript
// scanner/scanUser.js
|
|
const path = require('path');
|
|
const fsp = require('fs/promises');
|
|
const scanCartella = require('./scanCartella');
|
|
const processFile = require('./processFile');
|
|
const { sha256 } = require('./utils');
|
|
const { SUPPORTED_EXTS } = require('../config');
|
|
|
|
/**
|
|
* Scansiona la root dell'utente (p.es. .../<user>/original) e:
|
|
* - indicizza i file direttamente al root (cartella virtuale "_root")
|
|
* - per ogni sottocartella, chiama scanCartella
|
|
*/
|
|
async function scanUserRoot(userName, userDir, previousIndex) {
|
|
const results = [];
|
|
const entries = await fsp.readdir(userDir, { withFileTypes: true });
|
|
|
|
// 1) File direttamente al root (virtual folder "_root")
|
|
for (const e of entries) {
|
|
if (e.isDirectory()) continue;
|
|
|
|
const ext = path.extname(e.name).toLowerCase();
|
|
if (!SUPPORTED_EXTS.has(ext)) continue;
|
|
|
|
const absPath = path.join(userDir, e.name);
|
|
const st = await fsp.stat(absPath);
|
|
|
|
const fileRelPath = e.name;
|
|
const cartella = '_root';
|
|
const id = sha256(`${userName}/${cartella}/${fileRelPath}`);
|
|
|
|
const prev = previousIndex[id];
|
|
const unchanged =
|
|
prev &&
|
|
prev.size_bytes === st.size &&
|
|
prev.mtimeMs === st.mtimeMs;
|
|
|
|
if (unchanged) continue;
|
|
|
|
const meta = await processFile(
|
|
userName,
|
|
cartella,
|
|
fileRelPath,
|
|
absPath,
|
|
ext,
|
|
st
|
|
);
|
|
meta.id = id;
|
|
results.push(meta);
|
|
}
|
|
|
|
// 2) Sottocartelle (comportamento classico)
|
|
for (const e of entries) {
|
|
if (!e.isDirectory()) continue;
|
|
const cartella = e.name;
|
|
const absCartella = path.join(userDir, cartella);
|
|
const files = await scanCartella(userName, cartella, absCartella, previousIndex);
|
|
results.push(...files);
|
|
}
|
|
|
|
return results;
|
|
}
|
|
|
|
module.exports = scanUserRoot; |