mirror of
https://github.com/dream-pep/koring-launcher.git
synced 2026-09-12 05:45:18 +08:00
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.
89 lines
3.1 KiB
TypeScript
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) };
|
|
}
|
|
});
|
|
}
|