Files
cc-switch/src/main/index.ts

101 lines
2.4 KiB
TypeScript
Raw Normal View History

2025-08-04 22:16:26 +08:00
import { app, BrowserWindow, ipcMain } from 'electron'
import path from 'path'
import Store from 'electron-store'
import { Provider, AppConfig } from '../shared/types'
import { checkProviderStatus, switchProvider, getClaudeCodeConfig } from './services'
const store = new Store<AppConfig>()
let mainWindow: BrowserWindow | null = null
function createWindow() {
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, '../main/preload.js'),
2025-08-04 22:16:26 +08:00
contextIsolation: true,
nodeIntegration: false
},
titleBarStyle: 'hiddenInset',
autoHideMenuBar: true
})
if (app.isPackaged) {
mainWindow.loadFile(path.join(__dirname, '../renderer/index.html'))
} else {
mainWindow.loadURL('http://localhost:3000')
mainWindow.webContents.openDevTools()
}
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()
}
})
// IPC handlers
ipcMain.handle('getProviders', () => {
return store.get('providers', {})
})
ipcMain.handle('getCurrentProvider', () => {
return store.get('current', '')
})
ipcMain.handle('addProvider', (_, provider: Provider) => {
const providers = store.get('providers', {})
providers[provider.id] = provider
store.set('providers', providers)
return true
})
ipcMain.handle('deleteProvider', (_, id: string) => {
const providers = store.get('providers', {})
delete providers[id]
store.set('providers', providers)
return true
})
ipcMain.handle('updateProvider', (_, provider: Provider) => {
const providers = store.get('providers', {})
providers[provider.id] = provider
store.set('providers', providers)
return true
})
2025-08-04 22:16:26 +08:00
ipcMain.handle('checkStatus', async (_, provider: Provider) => {
return await checkProviderStatus(provider)
})
ipcMain.handle('switchProvider', async (_, providerId: string) => {
const providers = store.get('providers', {})
const provider = providers[providerId]
if (provider) {
const success = await switchProvider(provider)
if (success) {
store.set('current', providerId)
}
return success
}
return false
})
ipcMain.handle('getClaudeCodeConfigPath', () => {
return getClaudeCodeConfig().path
})