node-hp-scan-to 1.7.1 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/README.md +3 -2
  2. package/dist/HPApi.d.ts +16 -16
  3. package/dist/HPApi.js +14 -14
  4. package/dist/HPApi.js.map +1 -1
  5. package/dist/PathHelper.d.ts +2 -0
  6. package/dist/PathHelper.js +11 -1
  7. package/dist/PathHelper.js.map +1 -1
  8. package/dist/commands/adfAutoscanCmd.d.ts +2 -0
  9. package/dist/commands/adfAutoscanCmd.js +58 -0
  10. package/dist/commands/adfAutoscanCmd.js.map +1 -0
  11. package/dist/commands/clearRegistrationsCmd.d.ts +1 -0
  12. package/dist/commands/clearRegistrationsCmd.js +15 -0
  13. package/dist/commands/clearRegistrationsCmd.js.map +1 -0
  14. package/dist/commands/listenCmd.d.ts +3 -0
  15. package/dist/commands/listenCmd.js +198 -0
  16. package/dist/commands/listenCmd.js.map +1 -0
  17. package/dist/commands/singleScanCmd.d.ts +2 -0
  18. package/dist/commands/singleScanCmd.js +24 -0
  19. package/dist/commands/singleScanCmd.js.map +1 -0
  20. package/dist/commitInfo.json +1 -1
  21. package/dist/hpModels/Destination.js.map +1 -0
  22. package/dist/hpModels/Event.js.map +1 -0
  23. package/dist/hpModels/EventTable.js.map +1 -0
  24. package/dist/hpModels/Job.js.map +1 -0
  25. package/dist/{ScanCaps.d.ts → hpModels/ScanCaps.d.ts} +5 -0
  26. package/dist/{ScanCaps.js → hpModels/ScanCaps.js} +16 -0
  27. package/dist/hpModels/ScanCaps.js.map +1 -0
  28. package/dist/hpModels/ScanJobManifest.js.map +1 -0
  29. package/dist/{ScanJobSettings.d.ts → hpModels/ScanJobSettings.d.ts} +1 -1
  30. package/dist/{ScanJobSettings.js → hpModels/ScanJobSettings.js} +1 -1
  31. package/dist/hpModels/ScanJobSettings.js.map +1 -0
  32. package/dist/{ScanStatus.d.ts → hpModels/ScanStatus.d.ts} +1 -1
  33. package/dist/{ScanStatus.js → hpModels/ScanStatus.js} +1 -1
  34. package/dist/hpModels/ScanStatus.js.map +1 -0
  35. package/dist/{WalkupScanDestination.d.ts → hpModels/WalkupScanDestination.d.ts} +2 -2
  36. package/dist/hpModels/WalkupScanDestination.js.map +1 -0
  37. package/dist/hpModels/WalkupScanDestinations.js.map +1 -0
  38. package/dist/hpModels/WalkupScanManifest.js.map +1 -0
  39. package/dist/hpModels/WalkupScanToCompCaps.js.map +1 -0
  40. package/dist/{WalkupScanToCompDestination.d.ts → hpModels/WalkupScanToCompDestination.d.ts} +1 -1
  41. package/dist/hpModels/WalkupScanToCompDestination.js.map +1 -0
  42. package/dist/hpModels/WalkupScanToCompDestinations.js.map +1 -0
  43. package/dist/hpModels/WalkupScanToCompEvent.js.map +1 -0
  44. package/dist/hpModels/WalkupScanToCompManifest.js.map +1 -0
  45. package/dist/index.js +66 -106
  46. package/dist/index.js.map +1 -1
  47. package/dist/listening.d.ts +6 -8
  48. package/dist/listening.js +36 -24
  49. package/dist/listening.js.map +1 -1
  50. package/dist/nextcloud/nextcloud.d.ts +1 -1
  51. package/dist/paperless/paperless.d.ts +2 -2
  52. package/dist/paperless/paperless.js.map +1 -1
  53. package/dist/pdfProcessing.d.ts +1 -1
  54. package/dist/postProcessing.d.ts +2 -2
  55. package/dist/postProcessing.js +6 -5
  56. package/dist/postProcessing.js.map +1 -1
  57. package/dist/readDeviceCapabilities.d.ts +1 -1
  58. package/dist/readDeviceCapabilities.js +3 -1
  59. package/dist/readDeviceCapabilities.js.map +1 -1
  60. package/dist/scanJobHandlers.d.ts +8 -0
  61. package/dist/scanJobHandlers.js +182 -0
  62. package/dist/scanJobHandlers.js.map +1 -0
  63. package/dist/scanProcessing.d.ts +13 -29
  64. package/dist/scanProcessing.js +46 -183
  65. package/dist/scanProcessing.js.map +1 -1
  66. package/dist/{DeviceCapabilities.d.ts → type/DeviceCapabilities.d.ts} +2 -0
  67. package/dist/type/DeviceCapabilities.js.map +1 -0
  68. package/dist/type/DiscoveryTree.js.map +1 -0
  69. package/dist/type/InputSource.js.map +1 -0
  70. package/dist/type/KnownShortcut.d.ts +7 -0
  71. package/dist/type/KnownShortcut.js +12 -0
  72. package/dist/type/KnownShortcut.js.map +1 -0
  73. package/dist/{ScanContent.js.map → type/ScanContent.js.map} +1 -1
  74. package/dist/type/directoryConfig.d.ts +5 -0
  75. package/dist/type/directoryConfig.js +3 -0
  76. package/dist/type/directoryConfig.js.map +1 -0
  77. package/dist/type/duplexMode.d.ts +6 -0
  78. package/dist/type/duplexMode.js +11 -0
  79. package/dist/type/duplexMode.js.map +1 -0
  80. package/dist/type/pageCountingStrategy.d.ts +5 -0
  81. package/dist/type/pageCountingStrategy.js +10 -0
  82. package/dist/type/pageCountingStrategy.js.map +1 -0
  83. package/dist/type/scanConfigs.d.ts +21 -0
  84. package/dist/{KnownShortcut.js → type/scanConfigs.js} +1 -1
  85. package/dist/type/scanConfigs.js.map +1 -0
  86. package/dist/type/scanTargetDefinitions.d.ts +11 -0
  87. package/dist/type/scanTargetDefinitions.js +3 -0
  88. package/dist/type/scanTargetDefinitions.js.map +1 -0
  89. package/dist/type/targetDuplexMode.d.ts +5 -0
  90. package/dist/type/targetDuplexMode.js +10 -0
  91. package/dist/type/targetDuplexMode.js.map +1 -0
  92. package/package.json +4 -3
  93. package/dist/Destination.js.map +0 -1
  94. package/dist/DeviceCapabilities.js.map +0 -1
  95. package/dist/DiscoveryTree.js.map +0 -1
  96. package/dist/Event.js.map +0 -1
  97. package/dist/EventTable.js.map +0 -1
  98. package/dist/InputSource.js.map +0 -1
  99. package/dist/Job.js.map +0 -1
  100. package/dist/KnownShortcut.d.ts +0 -1
  101. package/dist/KnownShortcut.js.map +0 -1
  102. package/dist/ScanCaps.js.map +0 -1
  103. package/dist/ScanJobManifest.js.map +0 -1
  104. package/dist/ScanJobSettings.js.map +0 -1
  105. package/dist/ScanStatus.js.map +0 -1
  106. package/dist/WalkupScanDestination.js.map +0 -1
  107. package/dist/WalkupScanDestinations.js.map +0 -1
  108. package/dist/WalkupScanManifest.js.map +0 -1
  109. package/dist/WalkupScanToCompCaps.js.map +0 -1
  110. package/dist/WalkupScanToCompDestination.js.map +0 -1
  111. package/dist/WalkupScanToCompDestinations.js.map +0 -1
  112. package/dist/WalkupScanToCompEvent.js.map +0 -1
  113. package/dist/WalkupScanToCompManifest.js.map +0 -1
  114. /package/dist/{Destination.d.ts → hpModels/Destination.d.ts} +0 -0
  115. /package/dist/{Destination.js → hpModels/Destination.js} +0 -0
  116. /package/dist/{Event.d.ts → hpModels/Event.d.ts} +0 -0
  117. /package/dist/{Event.js → hpModels/Event.js} +0 -0
  118. /package/dist/{EventTable.d.ts → hpModels/EventTable.d.ts} +0 -0
  119. /package/dist/{EventTable.js → hpModels/EventTable.js} +0 -0
  120. /package/dist/{Job.d.ts → hpModels/Job.d.ts} +0 -0
  121. /package/dist/{Job.js → hpModels/Job.js} +0 -0
  122. /package/dist/{ScanJobManifest.d.ts → hpModels/ScanJobManifest.d.ts} +0 -0
  123. /package/dist/{ScanJobManifest.js → hpModels/ScanJobManifest.js} +0 -0
  124. /package/dist/{WalkupScanDestination.js → hpModels/WalkupScanDestination.js} +0 -0
  125. /package/dist/{WalkupScanDestinations.d.ts → hpModels/WalkupScanDestinations.d.ts} +0 -0
  126. /package/dist/{WalkupScanDestinations.js → hpModels/WalkupScanDestinations.js} +0 -0
  127. /package/dist/{WalkupScanManifest.d.ts → hpModels/WalkupScanManifest.d.ts} +0 -0
  128. /package/dist/{WalkupScanManifest.js → hpModels/WalkupScanManifest.js} +0 -0
  129. /package/dist/{WalkupScanToCompCaps.d.ts → hpModels/WalkupScanToCompCaps.d.ts} +0 -0
  130. /package/dist/{WalkupScanToCompCaps.js → hpModels/WalkupScanToCompCaps.js} +0 -0
  131. /package/dist/{WalkupScanToCompDestination.js → hpModels/WalkupScanToCompDestination.js} +0 -0
  132. /package/dist/{WalkupScanToCompDestinations.d.ts → hpModels/WalkupScanToCompDestinations.d.ts} +0 -0
  133. /package/dist/{WalkupScanToCompDestinations.js → hpModels/WalkupScanToCompDestinations.js} +0 -0
  134. /package/dist/{WalkupScanToCompEvent.d.ts → hpModels/WalkupScanToCompEvent.d.ts} +0 -0
  135. /package/dist/{WalkupScanToCompEvent.js → hpModels/WalkupScanToCompEvent.js} +0 -0
  136. /package/dist/{WalkupScanToCompManifest.d.ts → hpModels/WalkupScanToCompManifest.d.ts} +0 -0
  137. /package/dist/{WalkupScanToCompManifest.js → hpModels/WalkupScanToCompManifest.js} +0 -0
  138. /package/dist/{DeviceCapabilities.js → type/DeviceCapabilities.js} +0 -0
  139. /package/dist/{DiscoveryTree.d.ts → type/DiscoveryTree.d.ts} +0 -0
  140. /package/dist/{DiscoveryTree.js → type/DiscoveryTree.js} +0 -0
  141. /package/dist/{InputSource.d.ts → type/InputSource.d.ts} +0 -0
  142. /package/dist/{InputSource.js → type/InputSource.js} +0 -0
  143. /package/dist/{ScanContent.d.ts → type/ScanContent.d.ts} +0 -0
  144. /package/dist/{ScanContent.js → type/ScanContent.js} +0 -0
@@ -21,7 +21,7 @@ async function handlePdfPostProcessing(folder, tempFolder, scanCount, scanJobCon
21
21
  const nextcloudConfig = scanConfig.nextcloudConfig;
22
22
  const pdfFilePath = await (0, pdfProcessing_1.mergeToPdf)(paperlessConfig ? tempFolder : folder, scanCount, scanJobContent, scanConfig.directoryConfig.filePattern, scanDate, true);
23
23
  if (pdfFilePath != null) {
24
- displayPdfScan(pdfFilePath, scanJobContent);
24
+ displayPdfScan(pdfFilePath, scanJobContent, scanCount);
25
25
  if (paperlessConfig) {
26
26
  await (0, paperless_1.uploadPdfToPaperless)(pdfFilePath, paperlessConfig);
27
27
  }
@@ -34,7 +34,7 @@ async function handlePdfPostProcessing(folder, tempFolder, scanCount, scanJobCon
34
34
  async function handleImagePostProcessing(folder, scanCount, scanJobContent, scanDate, scanConfig) {
35
35
  const paperlessConfig = scanConfig.paperlessConfig;
36
36
  const nextcloudConfig = scanConfig.nextcloudConfig;
37
- displayJpegScan(scanJobContent);
37
+ displayJpegScan(scanJobContent, scanCount);
38
38
  if (paperlessConfig) {
39
39
  if (paperlessConfig.groupMultiPageScanIntoAPdf) {
40
40
  await (0, paperless_1.mergeToPdfAndUploadAsSingleDocumentToPaperless)(folder, scanCount, scanJobContent, scanConfig, scanDate, paperlessConfig);
@@ -54,15 +54,16 @@ async function handleImagePostProcessing(folder, scanCount, scanJobContent, scan
54
54
  const filePaths = scanJobContent.elements.map((element) => element.path);
55
55
  await cleanUpFilesIfNeeded(filePaths, paperlessConfig, nextcloudConfig);
56
56
  }
57
- function displayPdfScan(pdfFilePath, scanJobContent) {
57
+ function displayPdfScan(pdfFilePath, scanJobContent, scanCount) {
58
58
  if (pdfFilePath === null) {
59
59
  console.log(`Pdf generated has not been generated`);
60
60
  return;
61
61
  }
62
- console.log(`The following page(s) have been rendered inside '${pdfFilePath}': `);
62
+ console.log(`The following page(s) have been rendered inside '${pdfFilePath}' as part of scan #${scanCount}: `);
63
63
  scanJobContent.elements.forEach((e) => console.log(`\t- page ${e.pageNumber.toString().padStart(3, " ")} - ${e.width}x${e.height}`));
64
64
  }
65
- function displayJpegScan(scanJobContent) {
65
+ function displayJpegScan(scanJobContent, scanCount) {
66
+ console.log(`The following page(s) are part of scan #${scanCount}: `);
66
67
  scanJobContent.elements.forEach((e) => console.log(`\t- page ${e.pageNumber.toString().padStart(3, " ")} - ${e.width}x${e.height} - ${e.path}`));
67
68
  }
68
69
  async function cleanUpFilesIfNeeded(filePaths, paperlessConfig, nextcloudConfig) {
@@ -1 +1 @@
1
- {"version":3,"file":"postProcessing.js","sourceRoot":"","sources":["../src/postProcessing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"postProcessing.js","sourceRoot":"","sources":["../src/postProcessing.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { DeviceCapabilities } from "./DeviceCapabilities";
1
+ import { DeviceCapabilities } from "./type/DeviceCapabilities";
2
2
  export declare function readDeviceCapabilities(): Promise<DeviceCapabilities>;
@@ -33,7 +33,7 @@ async function readDeviceCapabilities() {
33
33
  await HPApi_1.default.getWalkupScanManifest(discoveryTree.WalkupScanManifestURI);
34
34
  }
35
35
  else {
36
- console.log("Unknown device!");
36
+ console.log("WARNING: No compatible device capabilities detected. The device may not support the listen command, and while the application will continue to run, it is likely to encounter a crash. If your device has an automatic document feeder, you may want to try using the adf-autoscan command.");
37
37
  }
38
38
  const scanCaps = await getScanCaps(discoveryTree);
39
39
  return {
@@ -45,6 +45,8 @@ async function readDeviceCapabilities() {
45
45
  adfMaxHeight: scanCaps?.adfMaxHeight || null,
46
46
  adfDuplexMaxWidth: scanCaps?.adfDuplexMaxWidth || null,
47
47
  adfDuplexMaxHeight: scanCaps?.adfDuplexMaxHeight || null,
48
+ hasAdfDuplex: scanCaps?.hasAdfDuplex || false,
49
+ hasAdfDetectPaperLoaded: scanCaps?.hasAdfDetectPaperLoaded || false,
48
50
  };
49
51
  }
50
52
  //# sourceMappingURL=readDeviceCapabilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"readDeviceCapabilities.js","sourceRoot":"","sources":["../src/readDeviceCapabilities.ts"],"names":[],"mappings":";;;;;AAkBA,wDAsCC;AAvDD,oDAA4B;AAI5B,KAAK,UAAU,WAAW,CAAC,aAA4B;IACrD,IAAI,QAAQ,GAAoB,IAAI,CAAC;IACrC,IAAI,aAAa,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC;QAC7C,MAAM,eAAe,GAAG,MAAM,eAAK,CAAC,kBAAkB,CACpD,aAAa,CAAC,kBAAkB,CACjC,CAAC;QACF,IAAI,eAAe,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;YACxC,QAAQ,GAAG,MAAM,eAAK,CAAC,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAEM,KAAK,UAAU,sBAAsB;IAC1C,IAAI,+BAA+B,GAAG,IAAI,CAAC;IAC3C,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAEhC,MAAM,aAAa,GAAG,MAAM,eAAK,CAAC,gBAAgB,EAAE,CAAC;IAErD,IAAI,aAAa,CAAC,2BAA2B,IAAI,IAAI,EAAE,CAAC;QACtD,mBAAmB,GAAG,IAAI,CAAC;QAC3B,MAAM,wBAAwB,GAAG,MAAM,eAAK,CAAC,2BAA2B,CACtE,aAAa,CAAC,2BAA2B,CAC1C,CAAC;QACF,IAAI,wBAAwB,CAAC,uBAAuB,IAAI,IAAI,EAAE,CAAC;YAC7D,MAAM,oBAAoB,GAAG,MAAM,eAAK,CAAC,uBAAuB,CAC9D,wBAAwB,CAAC,uBAAuB,CACjD,CAAC;YACF,+BAA+B;gBAC7B,oBAAoB,CAAC,+BAA+B,CAAC;QACzD,CAAC;IACH,CAAC;SAAM,IAAI,aAAa,CAAC,qBAAqB,IAAI,IAAI,EAAE,CAAC;QACvD,oEAAoE;QACpE,MAAM,eAAK,CAAC,qBAAqB,CAC/B,aAAa,CAAC,qBAAqB,CACpC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;IAElD,OAAO;QACL,+BAA+B;QAC/B,mBAAmB;QACnB,cAAc,EAAE,QAAQ,EAAE,cAAc,IAAI,IAAI;QAChD,eAAe,EAAE,QAAQ,EAAE,eAAe,IAAI,IAAI;QAClD,WAAW,EAAE,QAAQ,EAAE,WAAW,IAAI,IAAI;QAC1C,YAAY,EAAE,QAAQ,EAAE,YAAY,IAAI,IAAI;QAC5C,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,IAAI,IAAI;QACtD,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,IAAI,IAAI;KACzD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"readDeviceCapabilities.js","sourceRoot":"","sources":["../src/readDeviceCapabilities.ts"],"names":[],"mappings":";;;;;AAoBA,wDAsCC;AAzDD,oDAA4B;AAI5B,KAAK,UAAU,WAAW,CACxB,aAA4B;IAE5B,IAAI,QAAQ,GAAoB,IAAI,CAAC;IACrC,IAAI,aAAa,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC;QAC7C,MAAM,eAAe,GAAG,MAAM,eAAK,CAAC,kBAAkB,CACpD,aAAa,CAAC,kBAAkB,CACjC,CAAC;QACF,IAAI,eAAe,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;YACxC,QAAQ,GAAG,MAAM,eAAK,CAAC,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAEM,KAAK,UAAU,sBAAsB;IAC1C,IAAI,+BAA+B,GAAG,IAAI,CAAC;IAC3C,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAEhC,MAAM,aAAa,GAAG,MAAM,eAAK,CAAC,gBAAgB,EAAE,CAAC;IAErD,IAAI,aAAa,CAAC,2BAA2B,IAAI,IAAI,EAAE,CAAC;QACtD,mBAAmB,GAAG,IAAI,CAAC;QAC3B,MAAM,wBAAwB,GAAG,MAAM,eAAK,CAAC,2BAA2B,CACtE,aAAa,CAAC,2BAA2B,CAC1C,CAAC;QACF,IAAI,wBAAwB,CAAC,uBAAuB,IAAI,IAAI,EAAE,CAAC;YAC7D,MAAM,oBAAoB,GAAG,MAAM,eAAK,CAAC,uBAAuB,CAC9D,wBAAwB,CAAC,uBAAuB,CACjD,CAAC;YACF,+BAA+B;gBAC7B,oBAAoB,CAAC,+BAA+B,CAAC;QACzD,CAAC;IACH,CAAC;SAAM,IAAI,aAAa,CAAC,qBAAqB,IAAI,IAAI,EAAE,CAAC;QACvD,oEAAoE;QACpE,MAAM,eAAK,CAAC,qBAAqB,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,6RAA6R,CAAC,CAAC;IAC7S,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;IAElD,OAAO;QACL,+BAA+B;QAC/B,mBAAmB;QACnB,cAAc,EAAE,QAAQ,EAAE,cAAc,IAAI,IAAI;QAChD,eAAe,EAAE,QAAQ,EAAE,eAAe,IAAI,IAAI;QAClD,WAAW,EAAE,QAAQ,EAAE,WAAW,IAAI,IAAI;QAC1C,YAAY,EAAE,QAAQ,EAAE,YAAY,IAAI,IAAI;QAC5C,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,IAAI,IAAI;QACtD,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,IAAI,IAAI;QACxD,YAAY,EAAE,QAAQ,EAAE,YAAY,IAAI,KAAK;QAC7C,uBAAuB,EAAE,QAAQ,EAAE,uBAAuB,IAAI,KAAK;KACpE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { DeviceCapabilities } from "./type/DeviceCapabilities";
2
+ import ScanJobSettings from "./hpModels/ScanJobSettings";
3
+ import { ScanContent } from "./type/ScanContent";
4
+ import { InputSource } from "./type/InputSource";
5
+ import { SelectedScanTarget } from "./type/scanTargetDefinitions";
6
+ import { PageCountingStrategy } from "./type/pageCountingStrategy";
7
+ export declare function executeScanJob(scanJobSettings: ScanJobSettings, inputSource: InputSource, folder: string, scanCount: number, scanJobContent: ScanContent, filePattern: string | undefined, pageCountingStrategy: PageCountingStrategy): Promise<"Completed" | "Canceled">;
8
+ export declare function executeScanJobs(scanJobSettings: ScanJobSettings, inputSource: InputSource, folder: string, scanCount: number, scanJobContent: ScanContent, selectedScanTarget: SelectedScanTarget, deviceCapabilities: DeviceCapabilities, filePattern: string | undefined, pageCountingStrategy: PageCountingStrategy): Promise<void>;
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.executeScanJob = executeScanJob;
7
+ exports.executeScanJobs = executeScanJobs;
8
+ const HPApi_1 = __importDefault(require("./HPApi"));
9
+ const listening_1 = require("./listening");
10
+ const delay_1 = require("./delay");
11
+ const PathHelper_1 = __importDefault(require("./PathHelper"));
12
+ const InputSource_1 = require("./type/InputSource");
13
+ const promises_1 = __importDefault(require("fs/promises"));
14
+ const JpegUtil_1 = __importDefault(require("./JpegUtil"));
15
+ const pageCountingStrategy_1 = require("./type/pageCountingStrategy");
16
+ async function waitDeviceUntilItIsReadyToUploadOrCompleted(jobUrl) {
17
+ let job = null;
18
+ let isReadyToUpload = false;
19
+ do {
20
+ job = await HPApi_1.default.getJob(jobUrl);
21
+ if (job.jobState === "Canceled") {
22
+ return job;
23
+ }
24
+ else if (job.pageState === "ReadyToUpload" ||
25
+ job.jobState === "Completed") {
26
+ isReadyToUpload = true;
27
+ }
28
+ else if (job.jobState == "Processing") {
29
+ isReadyToUpload = false;
30
+ }
31
+ else {
32
+ console.log(`Unknown jobState: ${job.jobState}`);
33
+ }
34
+ await (0, delay_1.delay)(300);
35
+ } while (!isReadyToUpload);
36
+ return job;
37
+ }
38
+ async function scanProcessing(filePath) {
39
+ const buffer = await promises_1.default.readFile(filePath);
40
+ const height = JpegUtil_1.default.fixSizeWithDNL(buffer);
41
+ if (height != null) {
42
+ // rewrite the fixed file
43
+ await promises_1.default.writeFile(filePath, buffer);
44
+ return height;
45
+ }
46
+ return null;
47
+ }
48
+ function createScanPage(job, currentPageNumber, filePath, sizeFixed) {
49
+ const height = sizeFixed ?? job.imageHeight;
50
+ return {
51
+ path: filePath,
52
+ pageNumber: currentPageNumber,
53
+ width: job.imageWidth ?? 0,
54
+ height: height ?? 0,
55
+ xResolution: job.xResolution ?? 200,
56
+ yResolution: job.yResolution ?? 200,
57
+ };
58
+ }
59
+ async function handleScanProcessingState(job, inputSource, folder, scanCount, currentPageNumber, filePattern, date) {
60
+ if (job.pageState == "ReadyToUpload" &&
61
+ job.binaryURL != null &&
62
+ job.currentPageNumber != null) {
63
+ console.log(`Ready to download page job page ${job.currentPageNumber} at:`, job.binaryURL);
64
+ const destinationFilePath = PathHelper_1.default.getFileForPage(folder, scanCount, currentPageNumber, filePattern, "jpg", date);
65
+ const filePath = await HPApi_1.default.downloadPage(job.binaryURL, destinationFilePath);
66
+ console.log("Page downloaded to:", filePath);
67
+ let sizeFixed = null;
68
+ if (inputSource == InputSource_1.InputSource.Adf) {
69
+ sizeFixed = await scanProcessing(filePath);
70
+ if (sizeFixed == null) {
71
+ console.log(`File size has not been fixed, DNF may not have been found and approximate height is: ${job.imageHeight}`);
72
+ }
73
+ }
74
+ return createScanPage(job, currentPageNumber, filePath, sizeFixed);
75
+ }
76
+ else {
77
+ console.log(`Unknown pageState: ${job.pageState}`);
78
+ await (0, delay_1.delay)(200);
79
+ return null;
80
+ }
81
+ }
82
+ async function executeScanJob(scanJobSettings, inputSource, folder, scanCount, scanJobContent, filePattern, pageCountingStrategy) {
83
+ const jobUrl = await HPApi_1.default.postJob(scanJobSettings);
84
+ console.log(`Creating job with settings: ${JSON.stringify(scanJobSettings)}`);
85
+ console.log("New job created:", jobUrl);
86
+ let job = await HPApi_1.default.getJob(jobUrl);
87
+ while (job.jobState !== "Completed") {
88
+ job = await waitDeviceUntilItIsReadyToUploadOrCompleted(jobUrl);
89
+ if (job.jobState == "Completed") {
90
+ continue;
91
+ }
92
+ if (job.jobState === "Processing") {
93
+ let pageNumber;
94
+ if (pageCountingStrategy === pageCountingStrategy_1.PageCountingStrategy.Normal) {
95
+ pageNumber = scanJobContent.elements.length + 1;
96
+ }
97
+ else if (pageCountingStrategy === pageCountingStrategy_1.PageCountingStrategy.OddOnly) {
98
+ pageNumber = scanJobContent.elements.length * 2 + 1;
99
+ }
100
+ else if (pageCountingStrategy === pageCountingStrategy_1.PageCountingStrategy.EvenOnly) {
101
+ pageNumber = (scanJobContent.elements.length + 1) * 2;
102
+ }
103
+ else {
104
+ throw new Error(`Unknown page counting strategy: ${pageCountingStrategy}`);
105
+ }
106
+ const page = await handleScanProcessingState(job, inputSource, folder, scanCount, pageNumber, filePattern, new Date());
107
+ job = await HPApi_1.default.getJob(jobUrl);
108
+ if (page != null && job.jobState != "Canceled") {
109
+ scanJobContent.elements.push(page);
110
+ }
111
+ }
112
+ else if (job.jobState === "Canceled") {
113
+ console.log("Job cancelled by device");
114
+ break;
115
+ }
116
+ else {
117
+ console.log(`Unhandled jobState: ${job.jobState}`);
118
+ await (0, delay_1.delay)(200);
119
+ }
120
+ }
121
+ console.log(`Job state: ${job.jobState}, totalPages: ${scanJobContent.elements.length}:`);
122
+ return job.jobState;
123
+ }
124
+ async function waitScanNewPageRequest(compEventURI) {
125
+ let startNewScanJob = false;
126
+ let wait = true;
127
+ while (wait) {
128
+ await new Promise((resolve) => setTimeout(resolve, 1000)); //wait 1s
129
+ const walkupScanToCompEvent = await HPApi_1.default.getWalkupScanToCompEvent(compEventURI);
130
+ const message = walkupScanToCompEvent.eventType;
131
+ if (message === "ScanNewPageRequested") {
132
+ startNewScanJob = true;
133
+ wait = false;
134
+ }
135
+ else if (message === "ScanPagesComplete") {
136
+ wait = false;
137
+ }
138
+ else if (message === "ScanRequested") {
139
+ // continue waiting
140
+ }
141
+ else {
142
+ wait = false;
143
+ console.log(`Unknown eventType: ${message}`);
144
+ }
145
+ }
146
+ return startNewScanJob;
147
+ }
148
+ async function executeScanJobs(scanJobSettings, inputSource, folder, scanCount, scanJobContent, selectedScanTarget, deviceCapabilities, filePattern, pageCountingStrategy) {
149
+ let jobState = await executeScanJob(scanJobSettings, inputSource, folder, scanCount, scanJobContent, filePattern, pageCountingStrategy);
150
+ const scanTarget = {
151
+ resourceURI: selectedScanTarget.resourceURI,
152
+ label: selectedScanTarget.label,
153
+ isDuplexSingleSide: selectedScanTarget.isDuplexSingleSide,
154
+ };
155
+ let lastEvent = selectedScanTarget.event;
156
+ if (jobState === "Completed" &&
157
+ lastEvent.compEventURI &&
158
+ inputSource !== InputSource_1.InputSource.Adf &&
159
+ lastEvent.destinationURI &&
160
+ deviceCapabilities.supportsMultiItemScanFromPlaten) {
161
+ lastEvent = await (0, listening_1.waitForScanEventFromTarget)(scanTarget, lastEvent.agingStamp);
162
+ if (!lastEvent.compEventURI) {
163
+ return;
164
+ }
165
+ let startNewScanJob = await waitScanNewPageRequest(lastEvent.compEventURI);
166
+ while (startNewScanJob) {
167
+ jobState = await executeScanJob(scanJobSettings, inputSource, folder, scanCount, scanJobContent, filePattern, pageCountingStrategy);
168
+ if (jobState !== "Completed") {
169
+ return;
170
+ }
171
+ if (!lastEvent.destinationURI) {
172
+ break;
173
+ }
174
+ lastEvent = await (0, listening_1.waitForScanEventFromTarget)(scanTarget, lastEvent.agingStamp);
175
+ if (!lastEvent.compEventURI) {
176
+ return;
177
+ }
178
+ startNewScanJob = await waitScanNewPageRequest(lastEvent.compEventURI);
179
+ }
180
+ }
181
+ }
182
+ //# sourceMappingURL=scanJobHandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanJobHandlers.js","sourceRoot":"","sources":["../src/scanJobHandlers.ts"],"names":[],"mappings":"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"}
@@ -1,33 +1,17 @@
1
- import Event from "./Event";
2
- import { DeviceCapabilities } from "./DeviceCapabilities";
3
- import { InputSource } from "./InputSource";
4
- import { PaperlessConfig } from "./paperless/PaperlessConfig";
5
- import { NextcloudConfig } from "./nextcloud/NextcloudConfig";
1
+ import Event from "./hpModels/Event";
2
+ import WalkupScanDestination from "./hpModels/WalkupScanDestination";
3
+ import WalkupScanToCompDestination from "./hpModels/WalkupScanToCompDestination";
4
+ import { DeviceCapabilities } from "./type/DeviceCapabilities";
5
+ import { ScanContent } from "./type/ScanContent";
6
+ import { InputSource } from "./type/InputSource";
7
+ import { SelectedScanTarget } from "./type/scanTargetDefinitions";
8
+ import { AdfAutoScanConfig, ScanConfig, SingleScanConfig } from "./type/scanConfigs";
9
+ import { PageCountingStrategy } from "./type/pageCountingStrategy";
10
+ export declare function tryGetDestination(event: Event): Promise<WalkupScanDestination | WalkupScanToCompDestination | null>;
11
+ export declare function isPdf(destination: WalkupScanDestination | WalkupScanToCompDestination): boolean;
6
12
  export declare function getScanWidth(scanConfig: ScanConfig, inputSource: InputSource, deviceCapabilities: DeviceCapabilities, isDuplex: boolean): number | null;
7
13
  export declare function getScanHeight(scanConfig: ScanConfig, inputSource: InputSource, deviceCapabilities: DeviceCapabilities, isDuplex: boolean): number | null;
8
- export declare function saveScanFromEvent(event: Event, folder: string, tempFolder: string, scanCount: number, deviceCapabilities: DeviceCapabilities, scanConfig: ScanConfig): Promise<void>;
9
- export type DirectoryConfig = {
10
- directory: string | undefined;
11
- tempDirectory: string | undefined;
12
- filePattern: string | undefined;
13
- };
14
- export type ScanConfig = {
15
- resolution: number;
16
- width: number | null;
17
- height: number | null;
18
- directoryConfig: DirectoryConfig;
19
- paperlessConfig: PaperlessConfig | undefined;
20
- nextcloudConfig: NextcloudConfig | undefined;
21
- };
22
- export type AdfAutoScanConfig = ScanConfig & {
23
- isDuplex: boolean;
24
- generatePdf: boolean;
25
- pollingInterval: number;
26
- startScanDelay: number;
27
- };
28
- export type SingleScanConfig = ScanConfig & {
29
- isDuplex: boolean;
30
- generatePdf: boolean;
31
- };
14
+ export declare function saveScanFromEvent(selectedScanTarget: SelectedScanTarget, folder: string, tempFolder: string, scanCount: number, deviceCapabilities: DeviceCapabilities, scanConfig: ScanConfig, isDuplex: boolean, isPdf: boolean, pageCountingStrategy: PageCountingStrategy): Promise<ScanContent>;
32
15
  export declare function scanFromAdf(scanCount: number, folder: string, tempFolder: string, adfAutoScanConfig: AdfAutoScanConfig, deviceCapabilities: DeviceCapabilities, date: Date): Promise<void>;
16
+ export declare function singleScan(scanCount: number, folder: string, tempFolder: string, scanConfig: SingleScanConfig, deviceCapabilities: DeviceCapabilities, date: Date): Promise<void>;
33
17
  export declare function waitAdfLoaded(pollingInterval: number, startScanDelay: number): Promise<void>;
@@ -3,45 +3,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.tryGetDestination = tryGetDestination;
7
+ exports.isPdf = isPdf;
6
8
  exports.getScanWidth = getScanWidth;
7
9
  exports.getScanHeight = getScanHeight;
8
10
  exports.saveScanFromEvent = saveScanFromEvent;
9
11
  exports.scanFromAdf = scanFromAdf;
12
+ exports.singleScan = singleScan;
10
13
  exports.waitAdfLoaded = waitAdfLoaded;
11
14
  const HPApi_1 = __importDefault(require("./HPApi"));
12
- const promises_1 = __importDefault(require("fs/promises"));
13
- const JpegUtil_1 = __importDefault(require("./JpegUtil"));
14
- const listening_1 = require("./listening");
15
- const ScanJobSettings_1 = __importDefault(require("./ScanJobSettings"));
15
+ const ScanJobSettings_1 = __importDefault(require("./hpModels/ScanJobSettings"));
16
16
  const delay_1 = require("./delay");
17
- const PathHelper_1 = __importDefault(require("./PathHelper"));
18
- const InputSource_1 = require("./InputSource");
17
+ const InputSource_1 = require("./type/InputSource");
19
18
  const postProcessing_1 = require("./postProcessing");
20
- async function waitDeviceUntilItIsReadyToUploadOrCompleted(jobUrl) {
21
- let job = null;
22
- let isReadyToUpload = false;
23
- do {
24
- job = await HPApi_1.default.getJob(jobUrl);
25
- if (job.jobState === "Canceled") {
26
- return job;
27
- }
28
- else if (job.pageState === "ReadyToUpload" ||
29
- job.jobState === "Completed") {
30
- isReadyToUpload = true;
31
- }
32
- else if (job.jobState == "Processing") {
33
- isReadyToUpload = false;
34
- }
35
- else {
36
- console.log(`Unknown jobState: ${job.jobState}`);
37
- }
38
- await (0, delay_1.delay)(300);
39
- } while (!isReadyToUpload);
40
- return job;
41
- }
19
+ const scanJobHandlers_1 = require("./scanJobHandlers");
20
+ const KnownShortcut_1 = require("./type/KnownShortcut");
21
+ const pageCountingStrategy_1 = require("./type/pageCountingStrategy");
42
22
  async function tryGetDestination(event) {
43
- //this code can in some cases be executed before the user actually chooses between Document or Photo
44
- //so lets fetch the contentType (Document or Photo) until we get a value
23
+ // this code can in some cases be executed before the user actually chooses between Document or Photo
24
+ // so, let's fetch the contentType (Document or Photo) until we get a value
45
25
  let destination = null;
46
26
  for (let i = 0; i < 20; i++) {
47
27
  const destinationURI = event.destinationURI;
@@ -62,139 +42,14 @@ async function tryGetDestination(event) {
62
42
  console.log(JSON.stringify(destination));
63
43
  return null;
64
44
  }
65
- async function scanProcessing(filePath) {
66
- const buffer = await promises_1.default.readFile(filePath);
67
- const height = JpegUtil_1.default.fixSizeWithDNL(buffer);
68
- if (height != null) {
69
- // rewrite the fixed file
70
- await promises_1.default.writeFile(filePath, buffer);
71
- return height;
72
- }
73
- return null;
74
- }
75
- function createScanPage(job, currentPageNumber, filePath, sizeFixed) {
76
- const height = sizeFixed ?? job.imageHeight;
77
- return {
78
- path: filePath,
79
- pageNumber: currentPageNumber,
80
- width: job.imageWidth ?? 0,
81
- height: height ?? 0,
82
- xResolution: job.xResolution ?? 200,
83
- yResolution: job.yResolution ?? 200,
84
- };
85
- }
86
- async function handleScanProcessingState(job, inputSource, folder, scanCount, currentPageNumber, filePattern, date) {
87
- if (job.pageState == "ReadyToUpload" &&
88
- job.binaryURL != null &&
89
- job.currentPageNumber != null) {
90
- console.log(`Ready to download page job page ${job.currentPageNumber} at:`, job.binaryURL);
91
- const destinationFilePath = PathHelper_1.default.getFileForPage(folder, scanCount, currentPageNumber, filePattern, "jpg", date);
92
- const filePath = await HPApi_1.default.downloadPage(job.binaryURL, destinationFilePath);
93
- console.log("Page downloaded to:", filePath);
94
- let sizeFixed = null;
95
- if (inputSource == InputSource_1.InputSource.Adf) {
96
- sizeFixed = await scanProcessing(filePath);
97
- if (sizeFixed == null) {
98
- console.log(`File size has not been fixed, DNF may not have been found and approximate height is: ${job.imageHeight}`);
99
- }
100
- }
101
- return createScanPage(job, currentPageNumber, filePath, sizeFixed);
102
- }
103
- else {
104
- console.log(`Unknown pageState: ${job.pageState}`);
105
- await (0, delay_1.delay)(200);
106
- return null;
107
- }
108
- }
109
- async function executeScanJob(scanJobSettings, inputSource, folder, scanCount, scanJobContent, filePattern) {
110
- const jobUrl = await HPApi_1.default.postJob(scanJobSettings);
111
- console.log("New job created:", jobUrl);
112
- let job = await HPApi_1.default.getJob(jobUrl);
113
- while (job.jobState !== "Completed") {
114
- job = await waitDeviceUntilItIsReadyToUploadOrCompleted(jobUrl);
115
- if (job.jobState == "Completed") {
116
- continue;
117
- }
118
- if (job.jobState === "Processing") {
119
- const page = await handleScanProcessingState(job, inputSource, folder, scanCount, scanJobContent.elements.length + 1, filePattern, new Date());
120
- job = await HPApi_1.default.getJob(jobUrl);
121
- if (page != null && job.jobState != "Canceled") {
122
- scanJobContent.elements.push(page);
123
- }
124
- }
125
- else if (job.jobState === "Canceled") {
126
- console.log("Job cancelled by device");
127
- break;
128
- }
129
- else {
130
- console.log(`Unhandled jobState: ${job.jobState}`);
131
- await (0, delay_1.delay)(200);
132
- }
133
- }
134
- console.log(`Job state: ${job.jobState}, totalPages: ${scanJobContent.elements.length}:`);
135
- return job.jobState;
136
- }
137
- async function waitScanNewPageRequest(compEventURI) {
138
- let startNewScanJob = false;
139
- let wait = true;
140
- while (wait) {
141
- await new Promise((resolve) => setTimeout(resolve, 1000)); //wait 1s
142
- const walkupScanToCompEvent = await HPApi_1.default.getWalkupScanToCompEvent(compEventURI);
143
- const message = walkupScanToCompEvent.eventType;
144
- if (message === "ScanNewPageRequested") {
145
- startNewScanJob = true;
146
- wait = false;
147
- }
148
- else if (message === "ScanPagesComplete") {
149
- wait = false;
150
- }
151
- else if (message === "ScanRequested") {
152
- // continue waiting
153
- }
154
- else {
155
- wait = false;
156
- console.log(`Unknown eventType: ${message}`);
157
- }
158
- }
159
- return startNewScanJob;
160
- }
161
- async function executeScanJobs(scanJobSettings, inputSource, folder, scanCount, scanJobContent, firstEvent, deviceCapabilities, filePattern) {
162
- let jobState = await executeScanJob(scanJobSettings, inputSource, folder, scanCount, scanJobContent, filePattern);
163
- let lastEvent = firstEvent;
164
- if (jobState === "Completed" &&
165
- lastEvent.compEventURI &&
166
- inputSource !== InputSource_1.InputSource.Adf &&
167
- lastEvent.destinationURI &&
168
- deviceCapabilities.supportsMultiItemScanFromPlaten) {
169
- lastEvent = await (0, listening_1.waitForScanEvent)(lastEvent.destinationURI, lastEvent.agingStamp);
170
- if (!lastEvent.compEventURI) {
171
- return;
172
- }
173
- let startNewScanJob = await waitScanNewPageRequest(lastEvent.compEventURI);
174
- while (startNewScanJob) {
175
- jobState = await executeScanJob(scanJobSettings, inputSource, folder, scanCount, scanJobContent, filePattern);
176
- if (jobState !== "Completed") {
177
- return;
178
- }
179
- if (!lastEvent.destinationURI) {
180
- break;
181
- }
182
- lastEvent = await (0, listening_1.waitForScanEvent)(lastEvent.destinationURI, lastEvent.agingStamp);
183
- if (!lastEvent.compEventURI) {
184
- return;
185
- }
186
- startNewScanJob = await waitScanNewPageRequest(lastEvent.compEventURI);
187
- }
188
- }
189
- }
190
45
  function isPdf(destination) {
191
- if (destination.shortcut === "SavePDF" ||
192
- destination.shortcut === "EmailPDF" ||
193
- destination.shortcut == "SaveDocument1") {
46
+ if (destination.shortcut === KnownShortcut_1.KnownShortcut.SavePDF ||
47
+ destination.shortcut === KnownShortcut_1.KnownShortcut.EmailPDF ||
48
+ destination.shortcut == KnownShortcut_1.KnownShortcut.SaveDocument1) {
194
49
  return true;
195
50
  }
196
- else if (destination.shortcut === "SaveJPEG" ||
197
- destination.shortcut === "SavePhoto1") {
51
+ else if (destination.shortcut === KnownShortcut_1.KnownShortcut.SaveJPEG ||
52
+ destination.shortcut === KnownShortcut_1.KnownShortcut.SavePhoto1) {
198
53
  return false;
199
54
  }
200
55
  else {
@@ -238,35 +93,18 @@ function getScanHeight(scanConfig, inputSource, deviceCapabilities, isDuplex) {
238
93
  return maxHeight;
239
94
  }
240
95
  }
241
- async function saveScanFromEvent(event, folder, tempFolder, scanCount, deviceCapabilities, scanConfig) {
242
- if (event.compEventURI) {
243
- const proceedToScan = await (0, listening_1.waitScanRequest)(event.compEventURI);
244
- if (!proceedToScan) {
245
- return;
246
- }
247
- }
248
- const destination = await tryGetDestination(event);
249
- if (!destination) {
250
- console.log("No shortcut selected!");
251
- return;
252
- }
253
- console.log("Selected shortcut: " + destination.shortcut);
254
- let toPdf;
96
+ async function saveScanFromEvent(selectedScanTarget, folder, tempFolder, scanCount, deviceCapabilities, scanConfig, isDuplex, isPdf, pageCountingStrategy) {
255
97
  let destinationFolder;
256
98
  let contentType;
257
- if (isPdf(destination)) {
258
- toPdf = true;
99
+ if (isPdf) {
259
100
  contentType = "Document";
260
101
  destinationFolder = tempFolder;
261
102
  console.log(`Scan will be converted to pdf, using ${destinationFolder} as temp scan output directory for individual pages`);
262
103
  }
263
104
  else {
264
- toPdf = false;
265
105
  contentType = "Photo";
266
106
  destinationFolder = folder;
267
107
  }
268
- const isDuplex = destination.scanPlexMode != null && destination.scanPlexMode != "Simplex";
269
- console.log("ScanPlexMode is : " + destination.scanPlexMode);
270
108
  const scanStatus = await HPApi_1.default.getScanStatus();
271
109
  if (scanStatus.scannerState !== "Idle") {
272
110
  console.log("Scanner state is not Idle, aborting scan attempt...!");
@@ -277,10 +115,9 @@ async function saveScanFromEvent(event, folder, tempFolder, scanCount, deviceCap
277
115
  const scanHeight = getScanHeight(scanConfig, inputSource, deviceCapabilities, isDuplex);
278
116
  const scanJobSettings = new ScanJobSettings_1.default(inputSource, contentType, scanConfig.resolution, scanWidth, scanHeight, isDuplex);
279
117
  const scanJobContent = { elements: [] };
280
- const scanDate = new Date();
281
- await executeScanJobs(scanJobSettings, inputSource, destinationFolder, scanCount, scanJobContent, event, deviceCapabilities, scanConfig.directoryConfig.filePattern);
118
+ await (0, scanJobHandlers_1.executeScanJobs)(scanJobSettings, inputSource, destinationFolder, scanCount, scanJobContent, selectedScanTarget, deviceCapabilities, scanConfig.directoryConfig.filePattern, pageCountingStrategy);
282
119
  console.log(`Scan of page(s) completed totalPages: ${scanJobContent.elements.length}:`);
283
- await (0, postProcessing_1.postProcessing)(scanConfig, folder, tempFolder, scanCount, scanJobContent, scanDate, toPdf);
120
+ return scanJobContent;
284
121
  }
285
122
  async function scanFromAdf(scanCount, folder, tempFolder, adfAutoScanConfig, deviceCapabilities, date) {
286
123
  let destinationFolder;
@@ -298,10 +135,36 @@ async function scanFromAdf(scanCount, folder, tempFolder, adfAutoScanConfig, dev
298
135
  const scanHeight = getScanHeight(adfAutoScanConfig, InputSource_1.InputSource.Adf, deviceCapabilities, adfAutoScanConfig.isDuplex);
299
136
  const scanJobSettings = new ScanJobSettings_1.default(InputSource_1.InputSource.Adf, contentType, adfAutoScanConfig.resolution, scanWidth, scanHeight, adfAutoScanConfig.isDuplex);
300
137
  const scanJobContent = { elements: [] };
301
- await executeScanJob(scanJobSettings, InputSource_1.InputSource.Adf, destinationFolder, scanCount, scanJobContent, adfAutoScanConfig.directoryConfig.filePattern);
138
+ await (0, scanJobHandlers_1.executeScanJob)(scanJobSettings, InputSource_1.InputSource.Adf, destinationFolder, scanCount, scanJobContent, adfAutoScanConfig.directoryConfig.filePattern, pageCountingStrategy_1.PageCountingStrategy.Normal);
302
139
  console.log(`Scan of page(s) completed, total pages: ${scanJobContent.elements.length}:`);
303
140
  await (0, postProcessing_1.postProcessing)(adfAutoScanConfig, folder, tempFolder, scanCount, scanJobContent, date, adfAutoScanConfig.generatePdf);
304
141
  }
142
+ async function singleScan(scanCount, folder, tempFolder, scanConfig, deviceCapabilities, date) {
143
+ let destinationFolder;
144
+ let contentType;
145
+ if (scanConfig.generatePdf) {
146
+ contentType = "Document";
147
+ destinationFolder = tempFolder;
148
+ console.log(`Scan will be converted to pdf, using ${destinationFolder} as temp scan output directory for individual pages`);
149
+ }
150
+ else {
151
+ contentType = "Photo";
152
+ destinationFolder = folder;
153
+ }
154
+ const scanStatus = await HPApi_1.default.getScanStatus();
155
+ if (scanStatus.scannerState !== "Idle") {
156
+ console.log("Scanner state is not Idle, aborting scan attempt...!");
157
+ }
158
+ console.log("Afd is : " + scanStatus.adfState);
159
+ const inputSource = scanStatus.getInputSource();
160
+ const scanWidth = getScanWidth(scanConfig, inputSource, deviceCapabilities, scanConfig.isDuplex);
161
+ const scanHeight = getScanHeight(scanConfig, inputSource, deviceCapabilities, scanConfig.isDuplex);
162
+ const scanJobSettings = new ScanJobSettings_1.default(inputSource, contentType, scanConfig.resolution, scanWidth, scanHeight, scanConfig.isDuplex);
163
+ const scanJobContent = { elements: [] };
164
+ await (0, scanJobHandlers_1.executeScanJob)(scanJobSettings, inputSource, destinationFolder, scanCount, scanJobContent, scanConfig.directoryConfig.filePattern, pageCountingStrategy_1.PageCountingStrategy.Normal);
165
+ console.log(`Scan of page(s) completed, total pages: ${scanJobContent.elements.length}:`);
166
+ await (0, postProcessing_1.postProcessing)(scanConfig, folder, tempFolder, scanCount, scanJobContent, date, scanConfig.generatePdf);
167
+ }
305
168
  async function waitAdfLoaded(pollingInterval, startScanDelay) {
306
169
  let ready = false;
307
170
  while (!ready) {