From 72053246cbda476c601131e79d0e666e194868a8 Mon Sep 17 00:00:00 2001
From: Tim <tymmesyde@gmail.com>
Date: Thu, 27 Feb 2025 22:55:23 +0100
Subject: [PATCH] fix(useShell): use chrome.webview instead of qt
 webChannelTransport

---
 src/common/useShell.ts | 10 ++++++----
 src/types/global.d.ts  | 11 +++++++++++
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/common/useShell.ts b/src/common/useShell.ts
index 7baab60bc..1a7bcb6ee 100644
--- a/src/common/useShell.ts
+++ b/src/common/useShell.ts
@@ -2,7 +2,7 @@ import { useEffect } from 'react';
 import EventEmitter from 'eventemitter3';
 
 const SHELL_EVENT_OBJECT = 'transport';
-const transport = globalThis?.qt?.webChannelTransport;
+const transport = globalThis?.chrome?.webview;
 const events = new EventEmitter();
 
 enum ShellEventType {
@@ -30,7 +30,7 @@ const useShell = () => {
 
     const send = (method: string, ...args: (string | number)[]) => {
         try {
-            transport?.send(JSON.stringify({
+            transport?.postMessage(JSON.stringify({
                 id: createId(),
                 type: ShellEventType.INVOKE_METHOD,
                 object: SHELL_EVENT_OBJECT,
@@ -45,10 +45,9 @@ const useShell = () => {
     useEffect(() => {
         if (!transport) return;
 
-        transport.onmessage = ({ data }) => {
+        const onMessage = ({ data }: { data: string }) => {
             try {
                 const { type, args } = JSON.parse(data) as ShellEvent;
-
                 if (type === ShellEventType.SIGNAL) {
                     const [methodName, methodArg] = args;
                     events.emit(methodName, methodArg);
@@ -57,6 +56,9 @@ const useShell = () => {
                 console.error('Shell', 'Failed to handle event', e);
             }
         };
+
+        transport.addEventListener('message', onMessage);
+        return () => transport.removeEventListener('message', onMessage);
     }, []);
 
     return {
diff --git a/src/types/global.d.ts b/src/types/global.d.ts
index d1d601d5e..3849b8914 100644
--- a/src/types/global.d.ts
+++ b/src/types/global.d.ts
@@ -13,8 +13,19 @@ interface Qt {
     webChannelTransport: QtTransport,
 }
 
+interface ChromeWebView {
+    addEventListener: (type: 'message', listenenr: (event: any) => void) => void,
+    removeEventListener: (type: 'message', listenenr: (event: any) => void) => void,
+    postMessage: (message: string) => void,
+}
+
+interface Chrome {
+    webview: ChromeWebView,
+}
+
 declare global {
     var qt: Qt | undefined;
+    var chrome: Chrome | undefined;
 }
 
 export {};