From 4ea5a5e0c6627adfb899e45a388543b386f6931c Mon Sep 17 00:00:00 2001 From: Philippe Martin Date: Wed, 8 Nov 2023 15:29:08 +0100 Subject: [PATCH] feat: implement cancellation Signed-off-by: Philippe Martin --- packages/main/src/plugin/image-checker.ts | 5 +++-- packages/main/src/plugin/index.ts | 14 ++++++++++++-- packages/preload/src/index.ts | 8 ++++++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/packages/main/src/plugin/image-checker.ts b/packages/main/src/plugin/image-checker.ts index a293db0036b83..cff6f4d0419b1 100644 --- a/packages/main/src/plugin/image-checker.ts +++ b/packages/main/src/plugin/image-checker.ts @@ -1,4 +1,5 @@ import type { + CancellationToken, Disposable, ImageCheckerProvider, ImageCheckerProviderMetadata, @@ -63,11 +64,11 @@ export class ImageCheckerImpl { }); } - async check(providerId: string, image: ImageInfo): Promise { + async check(providerId: string, image: ImageInfo, token?: CancellationToken): Promise { const provider = this._imageCheckerProviders.get(providerId); if (provider === undefined) { throw new Error('provider not found with id ' + providerId); } - return provider.provider.check(image); + return provider.provider.check(image, token); } } diff --git a/packages/main/src/plugin/index.ts b/packages/main/src/plugin/index.ts index 76b99e2f27f6b..abd1a02629602 100644 --- a/packages/main/src/plugin/index.ts +++ b/packages/main/src/plugin/index.ts @@ -1953,8 +1953,18 @@ export class PluginSystem { this.ipcHandle( 'image-checker:check', - async (_listener, id: string, image: ImageInfo): Promise => { - return imageChecker.check(id, image); + async ( + _listener, + id: string, + image: ImageInfo, + tokenId?: number, + ): Promise => { + let token; + if (tokenId) { + const tokenSource = cancellationTokenRegistry.getCancellationTokenSource(tokenId); + token = tokenSource?.token; + } + return imageChecker.check(id, image, token); }, ); diff --git a/packages/preload/src/index.ts b/packages/preload/src/index.ts index 14d3b8ab5d22f..3e6084c227e85 100644 --- a/packages/preload/src/index.ts +++ b/packages/preload/src/index.ts @@ -1679,8 +1679,12 @@ function initExposure(): void { contextBridge.exposeInMainWorld( 'imageCheck', - async (id: string, image: string): Promise => { - return ipcInvoke('image-checker:check', id, image); + async ( + id: string, + image: string, + cancellationToken?: number, + ): Promise => { + return ipcInvoke('image-checker:check', id, image, cancellationToken); }, ); }