- Add binary selector component with dropdown and validation - Support custom OpenCode binary paths and system PATH binary - Async version checking for all binaries when selector opens - Store recent binaries with timestamps and version info - Enhanced instance creation to use selected binary - Improved storage system for binary preferences - Fixed validation to handle system PATH binaries properly
55 lines
1.2 KiB
TypeScript
55 lines
1.2 KiB
TypeScript
import { app, BrowserWindow, dialog, ipcMain } from "electron"
|
|
import { join } from "path"
|
|
import { createApplicationMenu } from "./menu"
|
|
import { setupInstanceIPC } from "./ipc"
|
|
import { setupStorageIPC } from "./storage"
|
|
|
|
// Setup IPC handlers before creating windows
|
|
setupStorageIPC()
|
|
|
|
let mainWindow: BrowserWindow | null = null
|
|
|
|
function createWindow() {
|
|
mainWindow = new BrowserWindow({
|
|
width: 1400,
|
|
height: 900,
|
|
minWidth: 800,
|
|
minHeight: 600,
|
|
webPreferences: {
|
|
preload: join(__dirname, "../preload/index.js"),
|
|
contextIsolation: true,
|
|
nodeIntegration: false,
|
|
},
|
|
})
|
|
|
|
if (process.env.NODE_ENV === "development") {
|
|
mainWindow.loadURL("http://localhost:3000")
|
|
mainWindow.webContents.openDevTools()
|
|
} else {
|
|
mainWindow.loadFile(join(__dirname, "../renderer/index.html"))
|
|
}
|
|
|
|
createApplicationMenu(mainWindow)
|
|
setupInstanceIPC(mainWindow)
|
|
|
|
mainWindow.on("closed", () => {
|
|
mainWindow = null
|
|
})
|
|
}
|
|
|
|
app.whenReady().then(() => {
|
|
createWindow()
|
|
|
|
app.on("activate", () => {
|
|
if (BrowserWindow.getAllWindows().length === 0) {
|
|
createWindow()
|
|
}
|
|
})
|
|
})
|
|
|
|
app.on("window-all-closed", () => {
|
|
if (process.platform !== "darwin") {
|
|
app.quit()
|
|
}
|
|
})
|