fetchSearchedFiles.js 2.9 KB

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