aboutsummaryrefslogtreecommitdiff
path: root/src/client/util/Import & Export
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/util/Import & Export')
-rw-r--r--src/client/util/Import & Export/ImageUtils.ts63
1 files changed, 34 insertions, 29 deletions
diff --git a/src/client/util/Import & Export/ImageUtils.ts b/src/client/util/Import & Export/ImageUtils.ts
index e2eab9010..23102e051 100644
--- a/src/client/util/Import & Export/ImageUtils.ts
+++ b/src/client/util/Import & Export/ImageUtils.ts
@@ -41,42 +41,47 @@ export namespace ImageUtils {
reader.onerror = e => reject(e);
reader.readAsDataURL(blob as Blob);
});
- };
- export function createImageDocFromBlob(blob: Blob, options: DocumentOptions, docId: string, nativeWidth: number, nativeHeight: number): Promise<Doc> {
+ }
+ export function createImageDocFromBlob(blob: Blob | undefined, options: DocumentOptions & { _nativeWidth: number; _nativeHeight: number }, filename: string): Promise<Doc> {
return new Promise((resolve, reject) => {
- convertImgBlobToDataURL(blob).then(durl => {
- ClientUtils.convertDataUri(durl as string, docId + '_noBgd').then(url => {
- const imageSnapshot = Docs.Create.ImageDocument(url, options);
- Doc.SetNativeWidth(imageSnapshot[DocData], nativeWidth);
- Doc.SetNativeHeight(imageSnapshot[DocData], nativeHeight);
- resolve(imageSnapshot);
- }).catch(reject);
- }).catch(reject);
+ if (!blob) return reject('No image blob provided');
+ convertImgBlobToDataURL(blob)
+ .then(durl => {
+ ClientUtils.convertDataUri(durl as string, filename)
+ .then(url => {
+ const imageSnapshot = Docs.Create.ImageDocument(url, options);
+ Doc.SetNativeWidth(imageSnapshot[DocData], options._nativeWidth);
+ Doc.SetNativeHeight(imageSnapshot[DocData], options._nativeHeight);
+ resolve(imageSnapshot);
+ })
+ .catch(reject);
+ })
+ .catch(reject);
});
}
- let backgroundRemovalWorker: Worker|undefined;
- const workerCallbackMap = new Map<string, (result: Doc) => void>();
- function getBackgroundRemovalWorker() {
+ let backgroundRemovalWorker: Worker | undefined;
+ const workerCallbackMap = new Map<string, { res: (imgBlob: Blob) => unknown; rej: () => unknown }>();
+ function getBackgroundRemovalWorker() {
if (backgroundRemovalWorker) return backgroundRemovalWorker;
backgroundRemovalWorker = new Worker('/image.worker.js', { type: 'module' });
- backgroundRemovalWorker.onerror = (e: ErrorEvent) => console.error('Worker failed:', e); // worker.terminate();
+ backgroundRemovalWorker.onerror = (e: ErrorEvent) => {
+ const docId = (e as ErrorEvent & { docId: string }).docId;
+ const map = workerCallbackMap.get(docId);
+ map?.rej();
+ workerCallbackMap.delete(docId); // worker.terminate();
+ };
backgroundRemovalWorker.onmessage = async (event: MessageEvent) => {
- if (event.data.success) {
- createImageDocFromBlob(event.data.result, event.data.options, event.data.docId, event.data.nativeWidth, event.data.nativeHeight)
- .then(imageSnapshot => {
- workerCallbackMap.get(event.data.docId)?.(imageSnapshot);
- workerCallbackMap.delete(event.data.docId);
- })
- } else {
- console.error('Error in background removal:', event.data.error);
- }
- // worker.terminate();
+ const map = workerCallbackMap.get(event.data.docId);
+ event.data.success ? map?.res(event.data.result) : map?.rej();
+ workerCallbackMap.delete(event.data.docId); // worker.terminate();
};
return backgroundRemovalWorker;
-
}
- export function removeImgBackground(options:DocumentOptions, cb: (result: Doc) => void, docId: string, nativeWidth:number, nativeHeight:number, docImgPath: string) {
- workerCallbackMap.set(docId, cb); // Store the callback by docId (or use a unique requestId)
- getBackgroundRemovalWorker().postMessage({ imagePath: docImgPath, options, docId, nativeWidth, nativeHeight });
- };
+ export function removeImgBackground(docId: string, imagePath: string) {
+ return new Promise<Blob | undefined>((res, rej) => {
+ if (!imagePath) return rej('No image path provided');
+ workerCallbackMap.set(docId, { res, rej }); // Store the callback by docId (or use a unique requestId)
+ getBackgroundRemovalWorker().postMessage({ imagePath, docId });
+ });
+ }
}