From 4b7f5947b838d19d8f318b910ad8f9a5d25038d1 Mon Sep 17 00:00:00 2001 From: Bortlesboat Date: Mon, 23 Mar 2026 12:05:53 -0400 Subject: [PATCH] fix: display app version in More menu Add IPC handler to expose app.getVersion() to the renderer and display it in the More dropdown menu. Users can now verify which version they're running. Fixes #70 Co-Authored-By: Claude Opus 4.6 (1M context) --- electron/electron-env.d.ts | 2 ++ electron/ipc/handlers.ts | 4 ++++ electron/preload.ts | 1 + src/components/launch/LaunchWindow.tsx | 31 ++++++++++++++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/electron/electron-env.d.ts b/electron/electron-env.d.ts index 20cc146..7b8876e 100644 --- a/electron/electron-env.d.ts +++ b/electron/electron-env.d.ts @@ -286,6 +286,8 @@ interface Window { message?: string; error?: string; }>; + /** Returns the app version from package.json */ + getAppVersion: () => Promise; /** Hide the OS cursor before browser capture starts. */ hideOsCursor: () => Promise<{ success: boolean }>; /** Countdown timer before recording */ diff --git a/electron/ipc/handlers.ts b/electron/ipc/handlers.ts index 16a265e..ebf73e6 100644 --- a/electron/ipc/handlers.ts +++ b/electron/ipc/handlers.ts @@ -4474,5 +4474,9 @@ body{background:transparent;overflow:hidden;width:100vw;height:100vh} seconds: countdownInProgress ? countdownRemaining : null, } }) + + ipcMain.handle('app:getVersion', () => { + return app.getVersion() + }) } diff --git a/electron/preload.ts b/electron/preload.ts index 43f141b..cfe9d8f 100644 --- a/electron/preload.ts +++ b/electron/preload.ts @@ -296,6 +296,7 @@ contextBridge.exposeInMainWorld("electronAPI", { isNativeWindowsCaptureAvailable: () => ipcRenderer.invoke("is-native-windows-capture-available"), muxNativeWindowsRecording: () => ipcRenderer.invoke("mux-native-windows-recording"), hideOsCursor: () => ipcRenderer.invoke("hide-cursor"), + getAppVersion: () => ipcRenderer.invoke("app:getVersion"), getCountdownDelay: () => ipcRenderer.invoke("get-countdown-delay"), setCountdownDelay: (delay: number) => ipcRenderer.invoke("set-countdown-delay", delay), startCountdown: (seconds: number) => ipcRenderer.invoke("start-countdown", seconds), diff --git a/src/components/launch/LaunchWindow.tsx b/src/components/launch/LaunchWindow.tsx index f1078fd..b62ca48 100644 --- a/src/components/launch/LaunchWindow.tsx +++ b/src/components/launch/LaunchWindow.tsx @@ -188,6 +188,7 @@ export function LaunchWindow() { const [sourcesLoading, setSourcesLoading] = useState(false); const [hideHudFromCapture, setHideHudFromCapture] = useState(true); const [platform, setPlatform] = useState(null); + const [appVersion, setAppVersion] = useState(null); const dropdownRef = useRef(null); const hudContentRef = useRef(null); const hudBarRef = useRef(null); @@ -372,6 +373,22 @@ export function LaunchWindow() { }; }, []); + useEffect(() => { + let cancelled = false; + const loadVersion = async () => { + try { + const version = await window.electronAPI.getAppVersion(); + if (!cancelled) setAppVersion(version); + } catch (error) { + console.error("Failed to load app version:", error); + } + }; + void loadVersion(); + return () => { + cancelled = true; + }; + }, []); + useEffect(() => { let cancelled = false; const loadHudCaptureProtection = async () => { @@ -1006,6 +1023,20 @@ export function LaunchWindow() { {LOCALE_LABELS[code] ?? code} ))} + {appVersion && ( +
+ v{appVersion} +
+ )} )}