// 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. ...//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;