Files
koring-launcher/electron/handlers/install.ts
T
dream_pep 9cb6a6e571 Migrate app from Tauri to Electron
Replace the Tauri/sidecar architecture with an Electron main process. Adds an electron/ directory (main, preload, handlers, core integrations for @xmcl/*), electron-builder.yml, TypeScript electron config and declarations, and updated IPC utilities (ipc.ts) so frontend uses ipcRenderer/ipcMain. Removes Tauri sidecar and src-tauri artifacts, deletes sidecar sources and keys, updates .gitignore, VSCode recommendations, package scripts and icons, and updates documentation (README, AGENTS, DEV) and frontend stores/apis to reflect the Electron-based architecture and config/auth persistence changes.
2026-06-28 03:37:07 +08:00

89 lines
3.1 KiB
TypeScript

import electron from 'electron';
import { installMinecraft, installModLoader, getVersionList, getForgeVersions, getFabricVersions } from '../core/installer';
const { ipcMain } = electron;
interface WinRef {
mainWindow: electron.BrowserWindow | null;
}
export function registerInstallHandlers(win: WinRef) {
ipcMain.handle('install:version-list', async (_event, payload: { type?: string }) => {
try {
const data = await getVersionList(payload.type);
return { success: true, data, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
ipcMain.handle('install:forge-version-list', async (_event, payload: { mcVersion?: string }) => {
try {
const data = await getForgeVersions(payload.mcVersion);
return { success: true, data, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
ipcMain.handle('install:fabric-version-list', async (_event, payload: { mcVersion?: string }) => {
try {
const data = await getFabricVersions(payload.mcVersion);
return { success: true, data, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
ipcMain.handle('install:minecraft', async (_event, payload: {
version: string;
gamePath: string;
javaPath?: string;
downloadThreads?: number;
}) => {
try {
const requestId = `install-mc-${Date.now()}`;
installMinecraft(payload.version, payload.gamePath, payload.javaPath, payload.downloadThreads, {
onProgress: (progress) => {
win.mainWindow?.webContents.send('install:progress', { requestId, ...progress });
},
}).then((result) => {
win.mainWindow?.webContents.send('install:complete', { requestId, ...result });
}).catch((err) => {
win.mainWindow?.webContents.send('install:error', { requestId, error: String(err) });
});
return { success: true, data: { requestId }, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
ipcMain.handle('install:mod-loader', async (_event, payload: {
mcVersion: string;
gamePath: string;
loaderType: string;
loaderVersion?: string;
javaPath?: string;
}) => {
try {
const requestId = `install-loader-${Date.now()}`;
installModLoader(payload.mcVersion, payload.gamePath, payload.loaderType as 'forge' | 'fabric' | 'quilt' | 'neoforge', payload.loaderVersion, payload.javaPath, {
onProgress: (progress) => {
win.mainWindow?.webContents.send('install:progress', { requestId, ...progress });
},
}).then((result) => {
win.mainWindow?.webContents.send('install:complete', { requestId, ...result });
}).catch((err) => {
win.mainWindow?.webContents.send('install:error', { requestId, error: String(err) });
});
return { success: true, data: { requestId }, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
}