// 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'); async function scanUserRoot(userName, userDir, previousIndexTree) { console.log(`\nšŸ”µ Inizio scan user: ${userName}`); const results = []; const entries = await fsp.readdir(userDir, { withFileTypes: true }); // ROOT FILES 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 hash = sha256(`${st.size}-${st.mtimeMs}`); const prev = previousIndexTree?.[userName]?.[cartella]?.[id]; if (prev && prev.hash === hash) continue; const meta = await processFile( userName, cartella, fileRelPath, absPath, ext, st ); meta.id = id; meta.path = `/photos/${userName}/original/${cartella}/${fileRelPath}`; meta._indexHash = hash; results.push(meta); } // SUBFOLDERS for (const e of entries) { if (!e.isDirectory()) continue; const cartella = e.name; const absCartella = path.join(userDir, cartella); console.log(` šŸ“ Cartella: ${cartella}`); const files = await scanCartella(userName, cartella, absCartella, previousIndexTree); results.push(...files); } return results; } module.exports = scanUserRoot;