From d3393cb0fc6d0ef1ef528a8ed2faf87f11a9cac7 Mon Sep 17 00:00:00 2001 From: Fangdun Tsai Date: Fri, 30 Jun 2023 12:47:30 +0800 Subject: [PATCH] feat: expose clipboard apis (#2932) --- apps/electron/src/main/clipboard/index.ts | 9 +++++++++ apps/electron/src/main/handlers.ts | 7 +++++++ packages/infra/src/handler.ts | 9 +++++++++ 3 files changed, 25 insertions(+) create mode 100644 apps/electron/src/main/clipboard/index.ts diff --git a/apps/electron/src/main/clipboard/index.ts b/apps/electron/src/main/clipboard/index.ts new file mode 100644 index 0000000000..b96c39e46c --- /dev/null +++ b/apps/electron/src/main/clipboard/index.ts @@ -0,0 +1,9 @@ +import { clipboard, nativeImage } from 'electron'; + +import type { NamespaceHandlers } from '../type'; + +export const clipboardHandlers = { + copyAsPng: async (_, dataURL: string) => { + clipboard.writeImage(nativeImage.createFromDataURL(dataURL)); + }, +} satisfies NamespaceHandlers; diff --git a/apps/electron/src/main/handlers.ts b/apps/electron/src/main/handlers.ts index 3eedda347b..c7d07b5cb9 100644 --- a/apps/electron/src/main/handlers.ts +++ b/apps/electron/src/main/handlers.ts @@ -1,4 +1,5 @@ import type { + ClipboardHandlerManager, DebugHandlerManager, ExportHandlerManager, UIHandlerManager, @@ -7,6 +8,7 @@ import type { } from '@toeverything/infra'; import { ipcMain } from 'electron'; +import { clipboardHandlers } from './clipboard'; import { exportHandlers } from './export'; import { getLogFilePath, logger, revealLogFile } from './logger'; import { uiHandlers } from './ui'; @@ -26,6 +28,10 @@ type AllHandlers = { Electron.IpcMainInvokeEvent, DebugHandlerManager >; + clipboard: UnwrapManagerHandlerToServerSide< + Electron.IpcMainInvokeEvent, + ClipboardHandlerManager + >; export: UnwrapManagerHandlerToServerSide< Electron.IpcMainInvokeEvent, ExportHandlerManager @@ -44,6 +50,7 @@ type AllHandlers = { export const allHandlers = { debug: debugHandlers, ui: uiHandlers, + clipboard: clipboardHandlers, export: exportHandlers, updater: updaterHandlers, } satisfies AllHandlers; diff --git a/packages/infra/src/handler.ts b/packages/infra/src/handler.ts index 688808e0ab..2b906ce221 100644 --- a/packages/infra/src/handler.ts +++ b/packages/infra/src/handler.ts @@ -80,6 +80,15 @@ export abstract class UIHandlerManager extends HandlerManager< UIHandlers > {} +type ClipboardHandlers = { + copyAsPng: (dataURL: string) => Promise; +}; + +export abstract class ClipboardHandlerManager extends HandlerManager< + 'clipboard', + ClipboardHandlers +> {} + type ExportHandlers = { savePDFFileAs: (title: string) => Promise; };