Files
koring-launcher/electron/handlers/mods.ts
T

102 lines
2.8 KiB
TypeScript
Raw Normal View History

2026-06-28 03:37:07 +08:00
import electron from 'electron';
2026-08-04 01:28:16 +08:00
import { searchMods, getModDetail, getModVersions, installMod, getCategories, getGameVersions } from '../core/modrinth';
2026-06-28 03:37:07 +08:00
const { ipcMain } = electron;
export function registerModsHandlers() {
ipcMain.handle('mods:search', async (_event, payload: {
query?: string;
gameVersion?: string;
loader?: string;
2026-08-04 01:28:16 +08:00
category?: string;
projectType?: string;
2026-06-28 03:37:07 +08:00
limit?: number;
offset?: number;
source: string;
}) => {
try {
const data = await searchMods(
payload.query,
payload.gameVersion,
payload.loader,
2026-08-04 01:28:16 +08:00
payload.category,
payload.projectType,
2026-06-28 03:37:07 +08:00
payload.limit,
payload.offset,
payload.source as 'modrinth' | 'curseforge'
);
return { success: true, data, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
2026-08-04 01:28:16 +08:00
ipcMain.handle('mods:categories', async (_event, payload: { projectType?: string }) => {
try {
const data = await getCategories(payload.projectType);
return { success: true, data, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
ipcMain.handle('mods:game-versions', async () => {
try {
const data = await getGameVersions();
return { success: true, data, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
2026-06-28 03:37:07 +08:00
ipcMain.handle('mods:detail', async (_event, payload: { projectId: string; source: string }) => {
try {
const data = await getModDetail(
payload.projectId,
payload.source as 'modrinth' | 'curseforge'
);
return { success: true, data, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
ipcMain.handle('mods:versions', async (_event, payload: {
projectId: string;
gameVersion?: string;
loader?: string;
source: string;
}) => {
try {
const data = await getModVersions(
payload.projectId,
payload.gameVersion,
payload.loader,
payload.source as 'modrinth' | 'curseforge'
);
return { success: true, data, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
ipcMain.handle('mods:install', async (_event, payload: {
projectId: string;
versionId?: string;
gamePath: string;
source: string;
}) => {
try {
const data = await installMod(
payload.projectId,
payload.versionId,
payload.gamePath,
payload.source as 'modrinth' | 'curseforge'
);
return { success: true, data, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
}