fetchSearchedFilesInBranch.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // lib/fetchSearchedFilesInBranch.js
  2. import smbClient from "@/lib/smbClient";
  3. import PDFParser from "pdf2json";
  4. function decodePDFText(texts) {
  5. return texts
  6. .map((text) => text.R.map((item) => decodeURIComponent(item.T)).join(""))
  7. .join(" ");
  8. }
  9. async function searchPDFsInDirectory(directoryPath, searchTerm) {
  10. return new Promise((resolve) => {
  11. smbClient.readdir(directoryPath, async (err, files) => {
  12. if (err) {
  13. console.error("Fehler beim Lesen des Verzeichnisses:", err);
  14. resolve([]);
  15. return;
  16. }
  17. let foundInFiles = [];
  18. console.log(`Durchsuche Verzeichnis: ${directoryPath}`);
  19. console.log(`Gefundene Dateien und Ordner:`, files);
  20. for (const file of files) {
  21. if (typeof file === "string") {
  22. const filePath = `${directoryPath}\\${file}`;
  23. if (file.toLowerCase().endsWith(".pdf")) {
  24. console.log(`Überprüfe PDF-Datei: ${filePath}`);
  25. const found = await searchInPDF(filePath, searchTerm);
  26. if (found) {
  27. console.log(`Begriff "${searchTerm}" gefunden in: ${filePath}`);
  28. foundInFiles.push(filePath);
  29. } else {
  30. console.log(
  31. `Begriff "${searchTerm}" NICHT gefunden in: ${filePath}`
  32. );
  33. }
  34. } else {
  35. // Wenn es sich nicht um eine PDF handelt, rekursiv durchsuchen (als Ordner annehmen)
  36. console.log(`Durchsuche Unterverzeichnis: ${filePath}`);
  37. const nestedResults = await searchPDFsInDirectory(
  38. filePath,
  39. searchTerm
  40. );
  41. foundInFiles = foundInFiles.concat(nestedResults);
  42. }
  43. }
  44. }
  45. resolve(foundInFiles);
  46. });
  47. });
  48. }
  49. async function searchInPDF(filePath, searchTerm) {
  50. return new Promise((resolve) => {
  51. smbClient.readFile(filePath, (err, data) => {
  52. if (err) {
  53. console.error("Fehler beim Lesen der Datei:", err);
  54. resolve(false);
  55. return;
  56. }
  57. const pdfParser = new PDFParser();
  58. pdfParser.on("pdfParser_dataReady", (pdfData) => {
  59. const textContent = pdfData.Pages.map((page) =>
  60. decodePDFText(page.Texts)
  61. ).join(" ");
  62. const containsTerm = textContent
  63. .toLowerCase()
  64. .includes(searchTerm.toLowerCase());
  65. resolve(containsTerm);
  66. });
  67. pdfParser.on("pdfParser_dataError", (parseErr) => {
  68. console.error("Fehler beim Verarbeiten der PDF:", parseErr);
  69. resolve(false);
  70. });
  71. pdfParser.parseBuffer(data);
  72. });
  73. });
  74. }
  75. export async function fetchSearchedFilesInBranch(niederlassungId, searchTerm) {
  76. const directoryPath = `${niederlassungId}`;
  77. try {
  78. console.log(`Starte Suche in Niederlassung: ${niederlassungId}`);
  79. const resultFiles = await searchPDFsInDirectory(directoryPath, searchTerm);
  80. return resultFiles;
  81. } catch (error) {
  82. console.error("Fehler bei der Suche nach Dateien:", error);
  83. return [];
  84. }
  85. }