57 lines
2.4 KiB
TypeScript
57 lines
2.4 KiB
TypeScript
import { ipcMain } from 'electron'
|
|
import { describeProject, listProjects } from '../ddev'
|
|
import { runStreamed } from '../commandRunner'
|
|
|
|
export function registerProjectsIpc(): void {
|
|
ipcMain.handle('projects:list', () => listProjects())
|
|
ipcMain.handle('projects:describe', (_event, name: string) => describeProject(name))
|
|
ipcMain.handle('projects:start', (event, operationId: string, name: string) =>
|
|
runStreamed(operationId, ['start', name], event.sender)
|
|
)
|
|
ipcMain.handle('projects:stop', (event, operationId: string, name: string) =>
|
|
runStreamed(operationId, ['stop', name], event.sender)
|
|
)
|
|
// `-y` matters here beyond convenience: we spawn `ddev` with no stdin
|
|
// wired up (see commandRunner.ts), so any confirmation prompt ddev tries
|
|
// to show — e.g. when a database type change requires it — would hang the
|
|
// operation forever with no way for the user to answer it.
|
|
ipcMain.handle('projects:restart', (event, operationId: string, name: string) =>
|
|
runStreamed(operationId, ['restart', name, '-y'], event.sender)
|
|
)
|
|
// Removes DDEV's project registration + containers + database (auto-
|
|
// snapshotted first, unless omitted) — does not touch the project's files
|
|
// on disk.
|
|
ipcMain.handle('projects:delete', (event, operationId: string, name: string) =>
|
|
runStreamed(operationId, ['delete', name, '--yes'], event.sender)
|
|
)
|
|
|
|
// Reconfigures a project's PHP version, web server, database, or Xdebug
|
|
// state via `ddev config` (writes .ddev/config.yaml) — callers are
|
|
// expected to follow a successful call with a restart (if the project is
|
|
// running) to actually apply it, same two-phase pattern as create.ts.
|
|
ipcMain.handle(
|
|
'projects:updateEnvironment',
|
|
(
|
|
event,
|
|
operationId: string,
|
|
name: string,
|
|
approot: string,
|
|
updates: {
|
|
phpVersion?: string
|
|
webserverType?: string
|
|
database?: string
|
|
xdebugEnabled?: boolean
|
|
}
|
|
) => {
|
|
const args = ['config', `--project-name=${name}`]
|
|
if (updates.phpVersion) args.push(`--php-version=${updates.phpVersion}`)
|
|
if (updates.webserverType) args.push(`--webserver-type=${updates.webserverType}`)
|
|
if (updates.database) args.push(`--database=${updates.database}`)
|
|
if (updates.xdebugEnabled !== undefined) {
|
|
args.push(`--xdebug-enabled=${updates.xdebugEnabled}`)
|
|
}
|
|
return runStreamed(operationId, args, event.sender, { cwd: approot })
|
|
}
|
|
)
|
|
}
|