// lib/fetchSearchedFiles.js import smbClient from "@/lib/smbClient"; import PDFParser from "pdf2json"; // Funktion, um kodierte Texte zu decodieren function decodePDFText(texts) { return texts .map((text) => text.R.map((item) => decodeURIComponent(item.T)).join("")) .join(" "); } // Funktion, um alle PDF-Dateien in einem Verzeichnis und seinen Unterverzeichnissen zu durchsuchen async function searchPDFsInDirectory(directoryPath, searchTerm) { return new Promise((resolve) => { smbClient.readdir(directoryPath, async (err, files) => { if (err) { console.error("Fehler beim Lesen des Verzeichnisses:", err); resolve([]); return; } let foundInFiles = []; console.log(`Durchsuche Verzeichnis: ${directoryPath}`); console.log(`Gefundene Dateien und Ordner:`, files); for (const file of files) { if (typeof file === "string") { const filePath = `${directoryPath}\\${file}`; // Überprüfe, ob es sich um eine PDF-Datei handelt if (file.toLowerCase().endsWith(".pdf")) { console.log(`Überprüfe Datei: ${filePath}`); const found = await searchInPDF(filePath, searchTerm); if (found) { console.log(`Begriff "${searchTerm}" gefunden in: ${filePath}`); foundInFiles.push(filePath); } else { console.log( `Begriff "${searchTerm}" NICHT gefunden in: ${filePath}` ); } } else { // Wenn es sich nicht um eine PDF handelt, rekursiv durchsuchen (als Ordner annehmen) const nestedResults = await searchPDFsInDirectory( filePath, searchTerm ); foundInFiles = foundInFiles.concat(nestedResults); } } } resolve(foundInFiles); }); }); } // Funktion, um einen bestimmten Suchbegriff in einer PDF-Datei zu suchen async function searchInPDF(filePath, searchTerm) { return new Promise((resolve) => { smbClient.readFile(filePath, (err, data) => { if (err) { console.error("Fehler beim Lesen der Datei:", err); resolve(false); return; } const pdfParser = new PDFParser(); pdfParser.on("pdfParser_dataReady", (pdfData) => { const textContent = pdfData.Pages.map((page) => decodePDFText(page.Texts) ).join(" "); const containsTerm = textContent .toLowerCase() .includes(searchTerm.toLowerCase()); resolve(containsTerm); }); pdfParser.on("pdfParser_dataError", (parseErr) => { console.error("Fehler beim Verarbeiten der PDF:", parseErr); resolve(false); }); pdfParser.parseBuffer(data); }); }); } // Funktion, um Dateien basierend auf einem Suchbegriff zu durchsuchen export async function fetchSearchedFiles(niederlassungId, searchTerm) { const directoryPath = `${niederlassungId}`; try { const resultFiles = await searchPDFsInDirectory(directoryPath, searchTerm); return resultFiles; } catch (error) { console.error("Fehler bei der Suche nach Dateien:", error); return []; } }