feat(ui): more ui improvements

This commit is contained in:
DecDuck
2024-11-24 16:12:19 +11:00
parent 305de9f45a
commit e408ac5df8
12 changed files with 201 additions and 85 deletions

View File

@ -1,6 +1,6 @@
import { EnumDictionary } from "../utils/types";
import https from "https";
import { useGlobalCertificateAuthority } from "~/server/plugins/ca";
import { useCertificateAuthority } from "~/server/plugins/ca";
import prisma from "../db/database";
import { ClientCapabilities } from "@prisma/client";
@ -48,7 +48,7 @@ class CapabilityManager {
)
return false;
const ca = useGlobalCertificateAuthority();
const ca = useCertificateAuthority();
const serverCertificate = await ca.fetchClientCertificate("server");
if (!serverCertificate)
throw new Error(

View File

@ -45,6 +45,11 @@ interface GameResult {
publishers: Array<{ id: number; name: string }>;
number_of_user_reviews: number; // Doesn't provide an actual rating, so kinda useless
original_release_date?: string;
expected_release_day?: number;
expected_release_month?: number;
expected_release_year?: number;
image: {
icon_url: string;
@ -180,11 +185,20 @@ export class GiantBombProvider implements MetadataProvider {
const images = [banner, ...imageURLs.map(createObject)];
const releaseDate = gameData.original_release_date
? moment(gameData.original_release_date).toDate()
: moment(
`${gameData.expected_release_day ?? 1}/${
gameData.expected_release_month ?? 1
}/${gameData.expected_release_year ?? new Date().getFullYear()}`
).toDate();
const metadata: GameMetadata = {
id: gameData.guid,
name: gameData.name,
shortDescription: gameData.deck,
description: longDescription,
released: releaseDate,
reviewCount: 0,
reviewRating: 0,

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;
@ -127,6 +127,7 @@ export class MetadataHandler {
mReviewCount: metadata.reviewCount,
mReviewRating: metadata.reviewRating,
mReleased: metadata.released,
mIconId: metadata.icon,
mBannerId: metadata.bannerId,
@ -144,7 +145,7 @@ export class MetadataHandler {
return (await this.fetchDeveloperPublisher(
query,
"fetchDeveloper",
"developer",
"developer"
)) as Developer;
}
@ -152,7 +153,7 @@ export class MetadataHandler {
return (await this.fetchDeveloperPublisher(
query,
"fetchPublisher",
"publisher",
"publisher"
)) as Publisher;
}
@ -161,7 +162,7 @@ export class MetadataHandler {
private async fetchDeveloperPublisher(
query: string,
functionName: any,
databaseName: any,
databaseName: any
) {
const existing = await (prisma as any)[databaseName].findFirst({
where: {
@ -173,7 +174,7 @@ 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 {
@ -206,7 +207,7 @@ export class MetadataHandler {
}
throw new Error(
`No metadata provider found a ${databaseName} for "${query}"`,
`No metadata provider found a ${databaseName} for "${query}"`
);
}
}

View File

@ -2,66 +2,68 @@ import { Developer, Publisher } from "@prisma/client";
import { ObjectReference } from "../objects";
export interface GameMetadataSearchResult {
id: string;
name: string;
icon: string;
description: string;
year: number;
id: string;
name: string;
icon: string;
description: string;
year: number;
}
export interface GameMetadataSource {
sourceId: string;
sourceName: string;
sourceId: string;
sourceName: string;
}
export type InternalGameMetadataResult = GameMetadataSearchResult & GameMetadataSource;
export type InternalGameMetadataResult = GameMetadataSearchResult &
GameMetadataSource;
export interface GameMetadata {
id: string;
name: string;
shortDescription: string;
description: string;
id: string;
name: string;
shortDescription: string;
description: string;
released: Date;
// These are created using utility functions passed to the metadata loader
// (that then call back into the metadata provider chain)
publishers: Publisher[]
developers: Developer[]
// These are created using utility functions passed to the metadata loader
// (that then call back into the metadata provider chain)
publishers: Publisher[];
developers: Developer[];
reviewCount: number;
reviewRating: number;
reviewCount: number;
reviewRating: number;
// Created with another utility function
icon: ObjectReference,
bannerId: ObjectReference,
coverId: ObjectReference;
images: ObjectReference[],
// Created with another utility function
icon: ObjectReference;
bannerId: ObjectReference;
coverId: ObjectReference;
images: ObjectReference[];
}
export interface PublisherMetadata {
id: string;
name: string;
shortDescription: string;
description: string;
id: string;
name: string;
shortDescription: string;
description: string;
logo: ObjectReference;
banner: ObjectReference;
website: String;
logo: ObjectReference;
banner: ObjectReference;
website: String;
}
export type DeveloperMetadata = PublisherMetadata;
export interface _FetchGameMetadataParams {
id: string,
id: string;
publisher: (query: string) => Promise<Publisher>
developer: (query: string) => Promise<Developer>
publisher: (query: string) => Promise<Publisher>;
developer: (query: string) => Promise<Developer>;
createObject: (url: string) => ObjectReference
createObject: (url: string) => ObjectReference;
}
export interface _FetchPublisherMetadataParams {
query: string;
createObject: (url: string) => ObjectReference;
query: string;
createObject: (url: string) => ObjectReference;
}
export type _FetchDeveloperMetadataParams = _FetchPublisherMetadataParams;
export type _FetchDeveloperMetadataParams = _FetchPublisherMetadataParams;