| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- // lib/fetchSearchedFilesAdmin.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 (Admin-Bereich)
- export async function fetchSearchedFilesAdmin(searchTerm) {
- const baseDirectoryPath = `Niederlassungen`; // Admin durchsucht den Hauptordner für alle Niederlassungen
- try {
- const resultFiles = await searchPDFsInDirectory(
- baseDirectoryPath,
- searchTerm
- );
- return resultFiles;
- } catch (error) {
- console.error("Fehler bei der Suche nach Dateien:", error);
- return [];
- }
- }
|