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.
+
+
+
+
+
+
+
UMU Launcher ID
+
+
+
+
+
+
+
();
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,