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.
- package/README.md +3 -2
- package/dist/HPApi.d.ts +16 -16
- package/dist/HPApi.js +14 -14
- package/dist/HPApi.js.map +1 -1
- package/dist/PathHelper.d.ts +2 -0
- package/dist/PathHelper.js +11 -1
- package/dist/PathHelper.js.map +1 -1
- package/dist/commands/adfAutoscanCmd.d.ts +2 -0
- package/dist/commands/adfAutoscanCmd.js +58 -0
- package/dist/commands/adfAutoscanCmd.js.map +1 -0
- package/dist/commands/clearRegistrationsCmd.d.ts +1 -0
- package/dist/commands/clearRegistrationsCmd.js +15 -0
- package/dist/commands/clearRegistrationsCmd.js.map +1 -0
- package/dist/commands/listenCmd.d.ts +3 -0
- package/dist/commands/listenCmd.js +198 -0
- package/dist/commands/listenCmd.js.map +1 -0
- package/dist/commands/singleScanCmd.d.ts +2 -0
- package/dist/commands/singleScanCmd.js +24 -0
- package/dist/commands/singleScanCmd.js.map +1 -0
- package/dist/commitInfo.json +1 -1
- package/dist/hpModels/Destination.js.map +1 -0
- package/dist/hpModels/Event.js.map +1 -0
- package/dist/hpModels/EventTable.js.map +1 -0
- package/dist/hpModels/Job.js.map +1 -0
- package/dist/{ScanCaps.d.ts → hpModels/ScanCaps.d.ts} +5 -0
- package/dist/{ScanCaps.js → hpModels/ScanCaps.js} +16 -0
- package/dist/hpModels/ScanCaps.js.map +1 -0
- package/dist/hpModels/ScanJobManifest.js.map +1 -0
- package/dist/{ScanJobSettings.d.ts → hpModels/ScanJobSettings.d.ts} +1 -1
- package/dist/{ScanJobSettings.js → hpModels/ScanJobSettings.js} +1 -1
- package/dist/hpModels/ScanJobSettings.js.map +1 -0
- package/dist/{ScanStatus.d.ts → hpModels/ScanStatus.d.ts} +1 -1
- package/dist/{ScanStatus.js → hpModels/ScanStatus.js} +1 -1
- package/dist/hpModels/ScanStatus.js.map +1 -0
- package/dist/{WalkupScanDestination.d.ts → hpModels/WalkupScanDestination.d.ts} +2 -2
- package/dist/hpModels/WalkupScanDestination.js.map +1 -0
- package/dist/hpModels/WalkupScanDestinations.js.map +1 -0
- package/dist/hpModels/WalkupScanManifest.js.map +1 -0
- package/dist/hpModels/WalkupScanToCompCaps.js.map +1 -0
- package/dist/{WalkupScanToCompDestination.d.ts → hpModels/WalkupScanToCompDestination.d.ts} +1 -1
- package/dist/hpModels/WalkupScanToCompDestination.js.map +1 -0
- package/dist/hpModels/WalkupScanToCompDestinations.js.map +1 -0
- package/dist/hpModels/WalkupScanToCompEvent.js.map +1 -0
- package/dist/hpModels/WalkupScanToCompManifest.js.map +1 -0
- package/dist/index.js +66 -106
- package/dist/index.js.map +1 -1
- package/dist/listening.d.ts +6 -8
- package/dist/listening.js +36 -24
- package/dist/listening.js.map +1 -1
- package/dist/nextcloud/nextcloud.d.ts +1 -1
- package/dist/paperless/paperless.d.ts +2 -2
- package/dist/paperless/paperless.js.map +1 -1
- package/dist/pdfProcessing.d.ts +1 -1
- package/dist/postProcessing.d.ts +2 -2
- package/dist/postProcessing.js +6 -5
- package/dist/postProcessing.js.map +1 -1
- package/dist/readDeviceCapabilities.d.ts +1 -1
- package/dist/readDeviceCapabilities.js +3 -1
- package/dist/readDeviceCapabilities.js.map +1 -1
- package/dist/scanJobHandlers.d.ts +8 -0
- package/dist/scanJobHandlers.js +182 -0
- package/dist/scanJobHandlers.js.map +1 -0
- package/dist/scanProcessing.d.ts +13 -29
- package/dist/scanProcessing.js +46 -183
- package/dist/scanProcessing.js.map +1 -1
- package/dist/{DeviceCapabilities.d.ts → type/DeviceCapabilities.d.ts} +2 -0
- package/dist/type/DeviceCapabilities.js.map +1 -0
- package/dist/type/DiscoveryTree.js.map +1 -0
- package/dist/type/InputSource.js.map +1 -0
- package/dist/type/KnownShortcut.d.ts +7 -0
- package/dist/type/KnownShortcut.js +12 -0
- package/dist/type/KnownShortcut.js.map +1 -0
- package/dist/{ScanContent.js.map → type/ScanContent.js.map} +1 -1
- package/dist/type/directoryConfig.d.ts +5 -0
- package/dist/type/directoryConfig.js +3 -0
- package/dist/type/directoryConfig.js.map +1 -0
- package/dist/type/duplexMode.d.ts +6 -0
- package/dist/type/duplexMode.js +11 -0
- package/dist/type/duplexMode.js.map +1 -0
- package/dist/type/pageCountingStrategy.d.ts +5 -0
- package/dist/type/pageCountingStrategy.js +10 -0
- package/dist/type/pageCountingStrategy.js.map +1 -0
- package/dist/type/scanConfigs.d.ts +21 -0
- package/dist/{KnownShortcut.js → type/scanConfigs.js} +1 -1
- package/dist/type/scanConfigs.js.map +1 -0
- package/dist/type/scanTargetDefinitions.d.ts +11 -0
- package/dist/type/scanTargetDefinitions.js +3 -0
- package/dist/type/scanTargetDefinitions.js.map +1 -0
- package/dist/type/targetDuplexMode.d.ts +5 -0
- package/dist/type/targetDuplexMode.js +10 -0
- package/dist/type/targetDuplexMode.js.map +1 -0
- package/package.json +4 -3
- package/dist/Destination.js.map +0 -1
- package/dist/DeviceCapabilities.js.map +0 -1
- package/dist/DiscoveryTree.js.map +0 -1
- package/dist/Event.js.map +0 -1
- package/dist/EventTable.js.map +0 -1
- package/dist/InputSource.js.map +0 -1
- package/dist/Job.js.map +0 -1
- package/dist/KnownShortcut.d.ts +0 -1
- package/dist/KnownShortcut.js.map +0 -1
- package/dist/ScanCaps.js.map +0 -1
- package/dist/ScanJobManifest.js.map +0 -1
- package/dist/ScanJobSettings.js.map +0 -1
- package/dist/ScanStatus.js.map +0 -1
- package/dist/WalkupScanDestination.js.map +0 -1
- package/dist/WalkupScanDestinations.js.map +0 -1
- package/dist/WalkupScanManifest.js.map +0 -1
- package/dist/WalkupScanToCompCaps.js.map +0 -1
- package/dist/WalkupScanToCompDestination.js.map +0 -1
- package/dist/WalkupScanToCompDestinations.js.map +0 -1
- package/dist/WalkupScanToCompEvent.js.map +0 -1
- package/dist/WalkupScanToCompManifest.js.map +0 -1
- /package/dist/{Destination.d.ts → hpModels/Destination.d.ts} +0 -0
- /package/dist/{Destination.js → hpModels/Destination.js} +0 -0
- /package/dist/{Event.d.ts → hpModels/Event.d.ts} +0 -0
- /package/dist/{Event.js → hpModels/Event.js} +0 -0
- /package/dist/{EventTable.d.ts → hpModels/EventTable.d.ts} +0 -0
- /package/dist/{EventTable.js → hpModels/EventTable.js} +0 -0
- /package/dist/{Job.d.ts → hpModels/Job.d.ts} +0 -0
- /package/dist/{Job.js → hpModels/Job.js} +0 -0
- /package/dist/{ScanJobManifest.d.ts → hpModels/ScanJobManifest.d.ts} +0 -0
- /package/dist/{ScanJobManifest.js → hpModels/ScanJobManifest.js} +0 -0
- /package/dist/{WalkupScanDestination.js → hpModels/WalkupScanDestination.js} +0 -0
- /package/dist/{WalkupScanDestinations.d.ts → hpModels/WalkupScanDestinations.d.ts} +0 -0
- /package/dist/{WalkupScanDestinations.js → hpModels/WalkupScanDestinations.js} +0 -0
- /package/dist/{WalkupScanManifest.d.ts → hpModels/WalkupScanManifest.d.ts} +0 -0
- /package/dist/{WalkupScanManifest.js → hpModels/WalkupScanManifest.js} +0 -0
- /package/dist/{WalkupScanToCompCaps.d.ts → hpModels/WalkupScanToCompCaps.d.ts} +0 -0
- /package/dist/{WalkupScanToCompCaps.js → hpModels/WalkupScanToCompCaps.js} +0 -0
- /package/dist/{WalkupScanToCompDestination.js → hpModels/WalkupScanToCompDestination.js} +0 -0
- /package/dist/{WalkupScanToCompDestinations.d.ts → hpModels/WalkupScanToCompDestinations.d.ts} +0 -0
- /package/dist/{WalkupScanToCompDestinations.js → hpModels/WalkupScanToCompDestinations.js} +0 -0
- /package/dist/{WalkupScanToCompEvent.d.ts → hpModels/WalkupScanToCompEvent.d.ts} +0 -0
- /package/dist/{WalkupScanToCompEvent.js → hpModels/WalkupScanToCompEvent.js} +0 -0
- /package/dist/{WalkupScanToCompManifest.d.ts → hpModels/WalkupScanToCompManifest.d.ts} +0 -0
- /package/dist/{WalkupScanToCompManifest.js → hpModels/WalkupScanToCompManifest.js} +0 -0
- /package/dist/{DeviceCapabilities.js → type/DeviceCapabilities.js} +0 -0
- /package/dist/{DiscoveryTree.d.ts → type/DiscoveryTree.d.ts} +0 -0
- /package/dist/{DiscoveryTree.js → type/DiscoveryTree.js} +0 -0
- /package/dist/{InputSource.d.ts → type/InputSource.d.ts} +0 -0
- /package/dist/{InputSource.js → type/InputSource.js} +0 -0
- /package/dist/{ScanContent.d.ts → type/ScanContent.d.ts} +0 -0
- /package/dist/{ScanContent.js → type/ScanContent.js} +0 -0
package/dist/postProcessing.js
CHANGED
|
@@ -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":";;;;;AAiBA,wCA2BC;AA3CD,mDAA6C;AAC7C,qDAK+B;AAC/B,qDAG+B;
|
|
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("
|
|
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":";;;;;
|
|
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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"}
|
package/dist/scanProcessing.d.ts
CHANGED
|
@@ -1,33 +1,17 @@
|
|
|
1
|
-
import Event from "./Event";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
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(
|
|
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>;
|
package/dist/scanProcessing.js
CHANGED
|
@@ -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
|
|
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
|
|
18
|
-
const InputSource_1 = require("./InputSource");
|
|
17
|
+
const InputSource_1 = require("./type/InputSource");
|
|
19
18
|
const postProcessing_1 = require("./postProcessing");
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
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 ===
|
|
192
|
-
destination.shortcut ===
|
|
193
|
-
destination.shortcut ==
|
|
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 ===
|
|
197
|
-
destination.shortcut ===
|
|
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(
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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) {
|