5dca94a3fc
Manifest-based CDN updater and mod manager for the OctoWoW 1.12.1 client: launcher-owned realmlist, torrent-backed content sync with bundled aria2c, antivirus and Defender exclusion handling, hardware-aware render distance, optional client tweaks and mods, and the in-launcher news feed.
39 lines
1.5 KiB
TypeScript
39 lines
1.5 KiB
TypeScript
import path from 'path';
|
|
|
|
import { z } from 'zod';
|
|
|
|
import Mods from '~main/modules/mods';
|
|
import Preferences from '~main/modules/preferences';
|
|
import { isGameRunning } from '~main/modules/updater';
|
|
import { ModIdSchema } from '~common/mods';
|
|
|
|
import { createTRPCRouter, publicProcedure } from '../trpc';
|
|
|
|
export const modsRouter = createTRPCRouter({
|
|
list: publicProcedure.query(() => Mods.status),
|
|
verify: publicProcedure.mutation(() => Mods.verify()),
|
|
toggle: publicProcedure
|
|
.input(z.object({ id: ModIdSchema, enabled: z.boolean() }))
|
|
.mutation(({ input }) => Mods.toggle(input.id, input.enabled)),
|
|
toggleCustom: publicProcedure
|
|
.input(z.object({ name: z.string(), enabled: z.boolean() }))
|
|
.mutation(({ input }) => Mods.toggleCustom(input.name, input.enabled)),
|
|
addCustomDll: publicProcedure
|
|
.input(z.object({ path: z.string() }))
|
|
.mutation(({ input }) => Mods.addCustomDll(input.path)),
|
|
setIgnoreUpdates: publicProcedure
|
|
.input(z.object({ id: ModIdSchema, ignore: z.boolean() }))
|
|
.mutation(({ input }) => Mods.setIgnoreUpdates(input.id, input.ignore)),
|
|
applyAll: publicProcedure.mutation(() => Mods.applyAll()),
|
|
repair: publicProcedure.mutation(async () => {
|
|
const clientDir = Preferences.data?.clientDir;
|
|
if (clientDir) {
|
|
const exePath = path.join(clientDir, 'WoW.exe');
|
|
if (await isGameRunning(exePath))
|
|
throw new Error('Please close WoW first before verifying files.');
|
|
}
|
|
return Mods.applyAll({ repairOnly: true });
|
|
}),
|
|
observe: publicProcedure.subscription(() => Mods.observe())
|
|
});
|