diff --git a/electron/main.ts b/electron/main.ts index 5d7a6dd..7c48fba 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -366,6 +366,10 @@ ipcMain.handle('xc-opencode-web-get-status', () => { return xcOpenCodeWebService.getStatus(); }); +ipcMain.handle('xc-opencode-web-get-port', () => { + return { port: xcOpenCodeWebService.port }; +}); + ipcMain.handle('xc-opencode-web-start', async () => { return await xcOpenCodeWebService.start(); }); diff --git a/electron/preload.ts b/electron/preload.ts index 687b51b..d9fa6d9 100644 --- a/electron/preload.ts +++ b/electron/preload.ts @@ -44,4 +44,5 @@ contextBridge.exposeInMainWorld('electronAPI', { xcOpenCodeWebStart: () => ipcRenderer.invoke('xc-opencode-web-start'), xcOpenCodeWebStop: () => ipcRenderer.invoke('xc-opencode-web-stop'), xcOpenCodeWebGetStatus: () => ipcRenderer.invoke('xc-opencode-web-get-status'), + xcOpenCodeWebGetPort: () => ipcRenderer.invoke('xc-opencode-web-get-port'), }) diff --git a/src/modules/opencode/OpenCodePage.tsx b/src/modules/opencode/OpenCodePage.tsx index 4bf330a..42d5d88 100644 --- a/src/modules/opencode/OpenCodePage.tsx +++ b/src/modules/opencode/OpenCodePage.tsx @@ -1,16 +1,20 @@ import React, { useEffect, useState } from 'react' -const XCOPENCODEWEB_PORT = 3002 - export const OpenCodePage: React.FC = () => { const [isRunning, setIsRunning] = useState(false) const [error, setError] = useState(null) + const [port, setPort] = useState(3002) useEffect(() => { let mounted = true - const startService = async () => { + const init = async () => { try { + const portResult = await window.electronAPI.xcOpenCodeWebGetPort() + if (mounted) { + setPort(portResult.port) + } + const result = await window.electronAPI.xcOpenCodeWebStart() if (mounted) { if (result.success) { @@ -27,7 +31,7 @@ export const OpenCodePage: React.FC = () => { } } - startService() + init() return () => { mounted = false @@ -51,7 +55,7 @@ export const OpenCodePage: React.FC = () => { {isRunning && (