// Copyright 2024, Command Line Inc. // SPDX-License-Identifier: Apache-2.0 import electron from "electron"; import { RpcResponseHelper, WshClient } from "../frontend/app/store/wshclient"; import { getWebContentsByBlockId, webGetSelector } from "./emain-web"; type WaveBrowserWindow = Electron.BrowserWindow & { waveWindowId: string; readyPromise: Promise }; export class ElectronWshClientType extends WshClient { constructor() { super("electron"); } async handle_webselector(rh: RpcResponseHelper, data: CommandWebSelectorData): Promise { if (!data.tabid || !data.blockid || !data.windowid) { throw new Error("tabid and blockid are required"); } const windows = electron.BrowserWindow.getAllWindows(); const win = windows.find((w) => (w as WaveBrowserWindow).waveWindowId === data.windowid); if (win == null) { throw new Error(`no window found with id ${data.windowid}`); } const wc = await getWebContentsByBlockId(win, data.tabid, data.blockid); if (wc == null) { throw new Error(`no webcontents found with blockid ${data.blockid}`); } const rtn = await webGetSelector(wc, data.selector, data.opts); return rtn; } async handle_notify(rh: RpcResponseHelper, notificationOptions: WaveNotificationOptions) { new electron.Notification({ title: notificationOptions.title, body: notificationOptions.body, silent: notificationOptions.silent, }).show(); } } export let ElectronWshClient: ElectronWshClientType; export function initElectronWshClient() { ElectronWshClient = new ElectronWshClientType(); }