From 00adab21c25498dcd56bd507cc7c03ee375dca9b Mon Sep 17 00:00:00 2001 From: DecDuck Date: Fri, 23 Jan 2026 05:04:38 +0000 Subject: [PATCH] Game specialisation & delta versions (#323) * feat: game specialisation, auto-guess extensions * fix: enforce specialisation specific schema at API level * fix: lint * feat: partial work on depot endpoints * feat: bump torrential * feat: dummy version creation for depot uploads * fix: lint * fix: types * fix: lint * feat: depot version import * fix: lint * fix: remove any type * fix: lint * fix: push update interval * fix: cpu usage calculation * feat: delta version support * feat: style tweaks for selectlaunch.vue * fix: lint --- .vscode/settings.json | 2 +- components/ExecutorWidget.vue | 2 +- components/GameEditor/VersionConfig.vue | 9 +- components/GameSearchResultWidget.vue | 8 +- components/ImportVersionLaunchRow.vue | 65 +++- components/Modal/AddCompanyGame.vue | 4 +- components/Modal/SelectLaunch.vue | 44 +-- components/Selector/FileExtension.vue | 118 ++++++++ components/Selector/Game.vue | 9 +- error.vue | 5 - nuxt.config.ts | 1 + package.json | 1 + pages/admin/library/[id]/import.vue | 168 +++++++---- pages/admin/library/import.vue | 58 +++- pages/admin/library/index.vue | 6 +- pnpm-lock.yaml | 139 ++------- .../migration.sql | 17 ++ .../migration.sql | 64 ++++ .../migration.sql | 14 + .../migration.sql | 27 ++ .../migration.sql | 14 + .../migration.sql | 15 + prisma/models/content.prisma | 45 ++- server/api/v1/admin/depot/index.get.ts | 11 + .../depot/{ => torrential}/manifest.get.ts | 6 +- .../depot/{ => torrential}/versions.get.ts | 5 + server/api/v1/admin/depot/upload.post.ts | 51 ++++ server/api/v1/admin/game/[id]/index.get.ts | 3 +- server/api/v1/admin/import/game/index.post.ts | 8 +- .../api/v1/admin/import/version/index.get.ts | 4 +- .../api/v1/admin/import/version/index.post.ts | 13 +- .../v1/admin/import/version/preload.get.ts | 26 +- server/api/v1/admin/search/game.get.ts | 9 +- .../[id]/version/[versionid]/index.get.ts | 35 ++- server/api/v1/client/game/manifest.get.ts | 19 +- server/api/v1/client/game/versions.get.ts | 7 +- server/api/v1/store/index.get.ts | 2 + server/internal/acls/descriptions.ts | 3 + server/internal/acls/index.ts | 3 + server/internal/gamesize/index.ts | 2 +- server/internal/library/index.ts | 279 +++++++++++++++--- server/internal/library/manifest.ts | 8 +- server/internal/library/manifest/index.ts | 100 +++++++ server/internal/metadata/index.ts | 11 +- server/internal/system-data/index.ts | 69 ++++- torrential | 2 +- 46 files changed, 1164 insertions(+), 347 deletions(-) create mode 100644 components/Selector/FileExtension.vue create mode 100644 prisma/migrations/20260119070859_add_game_type/migration.sql create mode 100644 prisma/migrations/20260119123507_update_game_version/migration.sql create mode 100644 prisma/migrations/20260119132823_add_executor_suggestions/migration.sql create mode 100644 prisma/migrations/20260122002153_add_unimported_game_version/migration.sql create mode 100644 prisma/migrations/20260122014854_add_filelist_to_unimported/migration.sql create mode 100644 prisma/migrations/20260123021108_add_file_list/migration.sql create mode 100644 server/api/v1/admin/depot/index.get.ts rename server/api/v1/admin/depot/{ => torrential}/manifest.get.ts (93%) rename server/api/v1/admin/depot/{ => torrential}/versions.get.ts (81%) create mode 100644 server/api/v1/admin/depot/upload.post.ts create mode 100644 server/internal/library/manifest/index.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 0570fe3..0d0624e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -33,7 +33,7 @@ "username": "drop" } ], - "typescript.experimental.useTsgo": false, + "typescript.experimental.useTsgo": true, // prioritize ArkType's "type" for autoimports "typescript.preferences.autoImportSpecifierExcludeRegexes": ["^(node:)?os$"] } diff --git a/components/ExecutorWidget.vue b/components/ExecutorWidget.vue index a7d466c..85fa869 100644 --- a/components/ExecutorWidget.vue +++ b/components/ExecutorWidget.vue @@ -4,7 +4,7 @@ class="flex space-x-4 rounded-md bg-zinc-900/50 px-6 outline -outline-offset-1 outline-white/10 w-fit text-xs font-bold text-zinc-100" >
- + {{ executor.gameName }}
diff --git a/components/GameEditor/VersionConfig.vue b/components/GameEditor/VersionConfig.vue index 7a1bf8e..e3d7041 100644 --- a/components/GameEditor/VersionConfig.vue +++ b/components/GameEditor/VersionConfig.vue @@ -28,12 +28,9 @@ :executor="{ launchId: props.config.launchId, gameName: props.config.executor.gameVersion.game.mName, - gameIcon: useObject( - props.config.executor.gameVersion.game.mIconObjectId, - ), - versionName: - props.config.executor.gameVersion.displayName ?? - props.config.executor.gameVersion.versionPath, + gameIcon: props.config.executor.gameVersion.game.mIconObjectId, + versionName: (props.config.executor.gameVersion.displayName ?? + props.config.executor.gameVersion.versionPath)!, launchName: props.config.executor.name, platform: props.config.executor.platform, }" diff --git a/components/GameSearchResultWidget.vue b/components/GameSearchResultWidget.vue index 46dfdff..d4afe67 100644 --- a/components/GameSearchResultWidget.vue +++ b/components/GameSearchResultWidget.vue @@ -1,6 +1,9 @@