From fd4a7d1981eb3b23bda20a53288d212dd56816d1 Mon Sep 17 00:00:00 2001 From: DecDuck Date: Mon, 23 Dec 2024 13:33:22 +1100 Subject: [PATCH] feat(umu id override): add support for overriding UMU id --- pages/admin/library/[id]/import.vue | 86 ++++++++++++++++++- .../migration.sql | 2 + prisma/schema/content.prisma | 1 + .../api/v1/admin/import/version/index.post.ts | 8 ++ server/internal/library/index.ts | 8 +- 5 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 prisma/migrations/20241223022005_add_umu_id_to_game_version/migration.sql diff --git a/pages/admin/library/[id]/import.vue b/pages/admin/library/[id]/import.vue index feaeea7..d892b7b 100644 --- a/pages/admin/library/[id]/import.vue +++ b/pages/admin/library/[id]/import.vue @@ -160,6 +160,72 @@ /> + +
+ + Advanced options + + + +
+ + + + Override UMU Launcher Game ID + By default, Drop uses a non-ID when launching with UMU + Launcher. In order to get the right patches for some games, you + may have to manually set this field. + + + + +
+ +
+ +
+
+
+
+ (); const delta = ref(false); +const _umuId = ref(""); +const umuIdEnabled = ref(false); +const umuId = computed({ + get() { + if (umuIdEnabled.value) return _umuId.value; + return undefined; + }, + set(v) { + if (umuIdEnabled.value && v) { + _umuId.value = v; + } + }, +}); + const importLoading = ref(false); const importError = ref(); @@ -272,7 +356,7 @@ async function startImport() { platform: versionSettings.value.platform, startup: versionSettings.value.startup, setup: versionSettings.value.setup, - delta: delta.value + delta: delta.value, }, }); router.push(`/admin/task/${taskId.taskId}`); diff --git a/prisma/migrations/20241223022005_add_umu_id_to_game_version/migration.sql b/prisma/migrations/20241223022005_add_umu_id_to_game_version/migration.sql new file mode 100644 index 0000000..9cac164 --- /dev/null +++ b/prisma/migrations/20241223022005_add_umu_id_to_game_version/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "GameVersion" ADD COLUMN "umuIdOverride" TEXT; diff --git a/prisma/schema/content.prisma b/prisma/schema/content.prisma index d304bc1..aa54d8b 100644 --- a/prisma/schema/content.prisma +++ b/prisma/schema/content.prisma @@ -44,6 +44,7 @@ model GameVersion { platform Platform launchCommand String // Command to run to start. Platform-specific. Windows games on Linux will wrap this command in Proton/Wine setupCommand String // Command to setup game (dependencies and such) + umuIdOverride String? dropletManifest Json // Results from droplet versionIndex Int diff --git a/server/api/v1/admin/import/version/index.post.ts b/server/api/v1/admin/import/version/index.post.ts index 768552b..ba28628 100644 --- a/server/api/v1/admin/import/version/index.post.ts +++ b/server/api/v1/admin/import/version/index.post.ts @@ -12,6 +12,7 @@ export default defineEventHandler(async (h3) => { const startup = body.startup; const setup = body.setup ?? ""; const delta = body.delta ?? false; + const umuId = body.umuId; // startup & delta require more complex checking logic if (!gameId || !versionName || !platform) @@ -21,6 +22,12 @@ export default defineEventHandler(async (h3) => { "ID, version, platform, setup, and startup (if not in update mode) are required.", }); + if (umuId && typeof umuId !== "string") + throw createError({ + statusCode: 400, + statusMessage: "If specified, UMU ID must be a string.", + }); + if (!delta && !startup) throw createError({ statusCode: 400, @@ -46,6 +53,7 @@ export default defineEventHandler(async (h3) => { platform, startup, setup, + umuId, }, delta ); diff --git a/server/internal/library/index.ts b/server/internal/library/index.ts index ae508c1..f716aa1 100644 --- a/server/internal/library/index.ts +++ b/server/internal/library/index.ts @@ -208,7 +208,12 @@ class LibraryManager { async importVersion( gameId: string, versionName: string, - metadata: { platform: string; setup: string; startup: string }, + metadata: { + platform: string; + setup: string; + startup: string; + umuId: string | undefined; + }, delta = false ) { const taskId = `import:${gameId}:${versionName}`; @@ -264,6 +269,7 @@ class LibraryManager { platform: platform, setupCommand: metadata.setup, launchCommand: metadata.startup, + umuIdOverride: metadata.umuId, dropletManifest: manifest, versionIndex: currentIndex, delta: delta,