additional polish and QoL features

This commit is contained in:
DecDuck
2024-10-22 09:43:00 +11:00
parent 03a37f72aa
commit 93bc143dac
7 changed files with 353 additions and 269 deletions
+7 -2
View File
@@ -1,4 +1,5 @@
import prisma from "~/server/internal/db/database";
import libraryManager from "~/server/internal/library";
export default defineEventHandler(async (h3) => {
const user = await h3.context.session.getAdminUser(h3);
@@ -26,7 +27,7 @@ export default defineEventHandler(async (h3) => {
versionName: true,
platform: true,
delta: true,
}
},
},
},
});
@@ -34,5 +35,9 @@ export default defineEventHandler(async (h3) => {
if (!game)
throw createError({ statusCode: 404, statusMessage: "Game ID not found" });
return game;
const unimportedVersions = await libraryManager.fetchUnimportedVersions(
game.id,
);
return { game, unimportedVersions };
});
@@ -15,7 +15,7 @@ export default defineEventHandler(async (h3) => {
throw createError({
statusCode: 400,
statusMessage:
"Missing id, version, platform, setup or startup from body",
"ID, version, platform, setup and startup (if not in upgrade mode) are required. ",
});
const taskId = await libraryManager.importVersion(
@@ -26,7 +26,7 @@ export default defineEventHandler(async (h3) => {
startup,
setup,
},
delta
delta,
);
if (!taskId)
throw createError({
+9
View File
@@ -0,0 +1,9 @@
import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
export default defineClientEventHandler(async (h3) => {
const query = getQuery(h3);
const gameId = query.game;
const versionName = query.version;
const chunkId = query.chunk;
});
+12 -12
View File
@@ -26,10 +26,10 @@ export abstract class MetadataProvider {
abstract search(query: string): Promise<GameMetadataSearchResult[]>;
abstract fetchGame(params: _FetchGameMetadataParams): Promise<GameMetadata>;
abstract fetchPublisher(
params: _FetchPublisherMetadataParams
params: _FetchPublisherMetadataParams,
): Promise<PublisherMetadata>;
abstract fetchDeveloper(
params: _FetchDeveloperMetadataParams
params: _FetchDeveloperMetadataParams,
): Promise<DeveloperMetadata>;
}
@@ -56,7 +56,7 @@ export class MetadataHandler {
Object.assign({}, result, {
sourceId: provider.id(),
sourceName: provider.name(),
})
}),
);
resolve(mappedResults);
});
@@ -74,7 +74,7 @@ export class MetadataHandler {
async createGame(
result: InternalGameMetadataResult,
libraryBasePath: string
libraryBasePath: string,
) {
const provider = this.providers.get(result.sourceId);
if (!provider)
@@ -92,7 +92,7 @@ export class MetadataHandler {
const [createObject, pullObjects, dumpObjects] = this.objectHandler.new(
{},
["internal:read"]
["internal:read"],
);
let metadata;
@@ -144,7 +144,7 @@ export class MetadataHandler {
return (await this.fetchDeveloperPublisher(
query,
"fetchDeveloper",
"developer"
"developer",
)) as Developer;
}
@@ -152,16 +152,16 @@ export class MetadataHandler {
return (await this.fetchDeveloperPublisher(
query,
"fetchPublisher",
"publisher"
"publisher",
)) as Publisher;
}
// Careful with this function, it has no typechecking
// TODO: fix typechecking
// Type-checking this thing is impossible
private async fetchDeveloperPublisher(
query: string,
functionName: any,
databaseName: any
databaseName: any,
) {
const existing = await (prisma as any)[databaseName].findFirst({
where: {
@@ -173,12 +173,12 @@ export class MetadataHandler {
for (const provider of this.providers.values() as any) {
const [createObject, pullObjects, dumpObjects] = this.objectHandler.new(
{},
["internal:read"]
["internal:read"],
);
let result;
try {
result = await provider[functionName]({ query, createObject });
} catch(e) {
} catch (e) {
console.warn(e);
dumpObjects();
continue;
@@ -206,7 +206,7 @@ export class MetadataHandler {
}
throw new Error(
`No metadata provider found a ${databaseName} for "${query}"`
`No metadata provider found a ${databaseName} for "${query}"`,
);
}
}
+7
View File
@@ -0,0 +1,7 @@
export type FilterConditionally<Source, Condition> = Pick<
Source,
{ [K in keyof Source]: Source[K] extends Condition ? K : never }[keyof Source]
>;
export type KeyOfType<T, V> = keyof {
[P in keyof T as T[P] extends V ? P : never]: any;
};