From 5cdffc294681bf567a68ea56e0aa35f4e1eb64fd Mon Sep 17 00:00:00 2001 From: MultiMote Date: Sat, 19 Oct 2024 23:17:34 +0300 Subject: [PATCH] Print tasks rework --- package.json | 2 +- src/lib/PrintPreview.svelte | 65 ++++++++++++++++++------------------- src/locale/en.ts | 2 +- src/locale/ru.ts | 2 +- src/locale/zh_cn.ts | 2 +- src/types.ts | 6 ++-- yarn.lock | 8 ++--- 7 files changed, 44 insertions(+), 43 deletions(-) diff --git a/package.json b/package.json index 5428698..579ad22 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ }, "dependencies": { "@fontsource-variable/noto-sans": "^5.0.5", - "@mmote/niimbluelib": "0.0.1-alpha.8", + "@mmote/niimbluelib": "0.0.1-alpha.9", "@popperjs/core": "^2.11.8", "bootstrap": "5.3.3", "d3-dsv": "^3.0.1", diff --git a/src/lib/PrintPreview.svelte b/src/lib/PrintPreview.svelte index c8298bb..86b2772 100644 --- a/src/lib/PrintPreview.svelte +++ b/src/lib/PrintPreview.svelte @@ -9,8 +9,9 @@ type EncodedImage, ImageEncoder, LabelType, - PrintTaskVersion, + printTaskNames, type PrintProgressEvent, + type PrintTaskName, } from "@mmote/niimbluelib"; import type { LabelProps, PostProcessType, FabricJson, PreviewProps } from "../types"; import ParamLockButton from "./ParamLockButton.svelte"; @@ -39,11 +40,11 @@ let thresholdValue: number = 140; let originalImage: ImageData; let previewContext: CanvasRenderingContext2D; - let printTaskVersion: PrintTaskVersion = PrintTaskVersion.V3; + let printTaskName: PrintTaskName = "D110"; let labelType: LabelType = LabelType.WithGaps; let statusTimer: NodeJS.Timeout | undefined = undefined; let error: string = ""; - let taskVer = $printerClient?.getPrintTaskVersion(); + let detectedPrintTaskName: PrintTaskName | undefined = $printerClient?.getPrintTaskType(); let csvParsed: DSVRowArray; let page = 0; let pagesTotal = 1; @@ -72,8 +73,16 @@ error = ""; $printerClient.stopHeartbeat(); - // do it in a stupid way (library not supports multi-page print yet) + // do it in a stupid way (multi-page print not finished yet) for (let curPage = 0; curPage < pagesTotal; curPage++) { + const printTask = $printerClient.abstraction.newPrintTask(printTaskName, { + totalPages: quantity, + density, + labelType, + statusPollIntervalMs: 100, + statusTimeoutMs: 8_000 + }) + page = curPage; console.log("Printing page", page); @@ -81,7 +90,8 @@ const encoded: EncodedImage = ImageEncoder.encodeCanvas(previewCanvas, labelProps.printDirection); try { - await $printerClient.abstraction.print(printTaskVersion, encoded, { quantity, density, labelType }); + await printTask.printInit(); + await printTask.printPage(encoded, quantity); } catch (e) { error = `${e}`; console.error(e); @@ -97,9 +107,7 @@ $printerClient.addEventListener("printprogress", listener); try { - await $printerClient.abstraction.waitUntilPrintFinished(printTaskVersion, quantity, { - pollIntervalMs: 100, timeoutMs: 8_000 - }); + await printTask.waitForFinished(); } catch (e) { error = `${e}`; console.error(e); @@ -110,6 +118,7 @@ await endPrint(); } + printState = "idle"; $printerClient.startHeartbeat(); @@ -169,7 +178,7 @@ if (saved.quantity) quantity = saved.quantity; if (saved.density) density = saved.density; if (saved.labelType) labelType = saved.labelType; - if (saved.printTaskVersion) printTaskVersion = saved.printTaskVersion; + if (saved.printTaskName) printTaskName = saved.printTaskName; } catch (e) { Toasts.zodErrors(e, "Preview parameters load error:"); } @@ -242,9 +251,9 @@ onClosed(); }); - if (taskVer !== undefined) { - console.log(`Detected print task version: ${PrintTaskVersion[taskVer]}`); - printTaskVersion = taskVer; + if (detectedPrintTaskName !== undefined) { + console.log(`Detected print task version: ${detectedPrintTaskName}`); + printTaskName = detectedPrintTaskName; } loadProps(); @@ -394,32 +403,22 @@
- {$tr("preview.print_task_version")} + {$tr("preview.print_task")}
diff --git a/src/locale/en.ts b/src/locale/en.ts index 30c5521..1353485 100644 --- a/src/locale/en.ts +++ b/src/locale/en.ts @@ -98,7 +98,7 @@ export const translation_en = { "preview.postprocess.atkinson": "Dither (Atkinson)", "preview.postprocess.threshold": "Threshold", "preview.postprocess": "Post-process", - "preview.print_task_version": "Print task version", + "preview.print_task": "Print task", "preview.print": "Print", "preview.threshold": "Threshold", "preview.title": "Print preview", diff --git a/src/locale/ru.ts b/src/locale/ru.ts index 2c21cb6..78bfb36 100644 --- a/src/locale/ru.ts +++ b/src/locale/ru.ts @@ -33,7 +33,7 @@ export const translation_ru: Record = { "preview.threshold": "Порог", "preview.copies": "Копии", "preview.density": "Плотность", - "preview.print_task_version": "Версия задачи печати", + "preview.print_task": "Задача печати", "preview.not_implemented": "НЕ РЕАЛИЗОВАНО", "preview.close": "Закрыть", "preview.print": "Печать", diff --git a/src/locale/zh_cn.ts b/src/locale/zh_cn.ts index 882b145..c849330 100644 --- a/src/locale/zh_cn.ts +++ b/src/locale/zh_cn.ts @@ -109,7 +109,7 @@ export const translation_zh_cn: Partial> = { "preview.postprocess.atkinson": "抖动(Atkinson)", "preview.postprocess.threshold": "阈值化", "preview.postprocess": "前置处理器", - "preview.print_task_version": "打印接口版本", + "preview.print_task": "打印接口", "preview.print": "打印", "preview.threshold": "阈值", "preview.title": "打印预览", diff --git a/src/types.ts b/src/types.ts index eaf0db5..7ed2031 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -import { LabelType, PrintTaskVersion } from "@mmote/niimbluelib"; +import { LabelType, printTaskNames } from "@mmote/niimbluelib"; import { fabric } from "fabric"; import { z } from "zod"; @@ -41,13 +41,15 @@ export const ExportedLabelTemplateSchema = z.object({ label: LabelPropsSchema, }); +const [firstTask, ...otherTasks] = printTaskNames; + export const PreviewPropsSchema = z.object({ postProcess: z.enum(["threshold", "dither"]).optional(), threshold: z.number().gte(1).lte(255).optional(), quantity: z.number().gte(1).optional(), density: z.number().gte(1).optional(), labelType: z.nativeEnum(LabelType).optional(), - printTaskVersion: z.nativeEnum(PrintTaskVersion).optional(), + printTaskName: z.enum([firstTask, ...otherTasks]).optional(), }); export type LabelProps = z.infer; diff --git a/yarn.lock b/yarn.lock index 421629f..cacf2a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -162,10 +162,10 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@mmote/niimbluelib@0.0.1-alpha.8": - version "0.0.1-alpha.8" - resolved "https://registry.yarnpkg.com/@mmote/niimbluelib/-/niimbluelib-0.0.1-alpha.8.tgz#960e0d46accc5490901f605defc46520fd03e3bb" - integrity sha512-g8+c3eTbe8M5OIeVrrdHbG1JnX+izLHgnsUcatm+SlPEatHK8dWyT8zpae+0Fj+bg6mpwlPjLaR/FGYjx3Mt3g== +"@mmote/niimbluelib@0.0.1-alpha.9": + version "0.0.1-alpha.9" + resolved "https://registry.yarnpkg.com/@mmote/niimbluelib/-/niimbluelib-0.0.1-alpha.9.tgz#ada0039701c7a33ee04bc86b3ffae6ec7e4eba57" + integrity sha512-ajgNq0nkV5borEWdTTWuxs/i6rFeB16XBsVmvbZR8Pfdm+56yQXS/tURthsvgrTwaKbtV1/606SXPwbONY59OA== dependencies: async-mutex "^0.5.0" typescript-event-target "^1.1.1"