feat: download ROS bridge images from R2 and show startup progress
This commit is contained in:
+16
-2
@@ -2,6 +2,20 @@ import { contextBridge, ipcRenderer } from 'electron'
|
||||
import { electronAPI } from '@electron-toolkit/preload'
|
||||
import { readFileSync, rmSync } from 'fs'
|
||||
|
||||
let visualizationRequestId = 0
|
||||
async function invokeVisualizationStart(channel: string, args: unknown[], onProgress?: (message: string) => void) {
|
||||
const requestId = `${Date.now()}:${++visualizationRequestId}`
|
||||
const listener = (_event: Electron.IpcRendererEvent, id: string, message: string) => {
|
||||
if (id === requestId) onProgress?.(message)
|
||||
}
|
||||
ipcRenderer.on('visualization:progress', listener)
|
||||
try {
|
||||
return await ipcRenderer.invoke(channel, ...args, requestId)
|
||||
} finally {
|
||||
ipcRenderer.removeListener('visualization:progress', listener)
|
||||
}
|
||||
}
|
||||
|
||||
type LauncherAuthPayload = {
|
||||
appUrl?: string | null
|
||||
handoffToken?: string | null
|
||||
@@ -232,7 +246,7 @@ contextBridge.exposeInMainWorld('localWorkspace', {
|
||||
},
|
||||
visualization: {
|
||||
status: () => ipcRenderer.invoke('local-workspace:visualization:status'),
|
||||
start: (stack?: 'autoware' | 'nav2' | 'slam' | 'slam3d', workspaceRoot?: string, rosDomainId?: string, environmentProfile?: unknown, rosNetwork?: RosNetworkConfig | null, savedMapDatabasePath?: string | null, savedMapWorldLayoutPath?: string | null) => ipcRenderer.invoke('local-workspace:visualization:start', stack, workspaceRoot, rosDomainId, environmentProfile, rosNetwork, savedMapDatabasePath, savedMapWorldLayoutPath),
|
||||
start: (stack?: 'autoware' | 'nav2' | 'slam' | 'slam3d', workspaceRoot?: string, rosDomainId?: string, environmentProfile?: unknown, rosNetwork?: RosNetworkConfig | null, savedMapDatabasePath?: string | null, savedMapWorldLayoutPath?: string | null, onProgress?: (message: string) => void) => invokeVisualizationStart('local-workspace:visualization:start', [stack, workspaceRoot, rosDomainId, environmentProfile, rosNetwork, savedMapDatabasePath, savedMapWorldLayoutPath], onProgress),
|
||||
stop: (environmentProfile?: unknown) => ipcRenderer.invoke('local-workspace:visualization:stop', environmentProfile)
|
||||
},
|
||||
git: {
|
||||
@@ -303,7 +317,7 @@ contextBridge.exposeInMainWorld('remoteWorkspace', {
|
||||
},
|
||||
visualization: {
|
||||
status: (target: RemoteWorkspaceTarget) => ipcRenderer.invoke('remote-workspace:visualization:status', target),
|
||||
start: (target: RemoteWorkspaceTarget, stack?: 'autoware' | 'nav2' | 'slam' | 'slam3d', rosDomainId?: string, environmentProfile?: unknown, rosNetwork?: RosNetworkConfig | null) => ipcRenderer.invoke('remote-workspace:visualization:start', target, stack, rosDomainId, environmentProfile, rosNetwork),
|
||||
start: (target: RemoteWorkspaceTarget, stack?: 'autoware' | 'nav2' | 'slam' | 'slam3d', rosDomainId?: string, environmentProfile?: unknown, rosNetwork?: RosNetworkConfig | null, onProgress?: (message: string) => void) => invokeVisualizationStart('remote-workspace:visualization:start', [target, stack, rosDomainId, environmentProfile, rosNetwork], onProgress),
|
||||
stop: (target: RemoteWorkspaceTarget) => ipcRenderer.invoke('remote-workspace:visualization:stop', target)
|
||||
},
|
||||
git: {
|
||||
|
||||
Reference in New Issue
Block a user