Allow manifest-override.yaml to override more IDs and to add games

This commit is contained in:
mtkennerly 2023-05-06 23:44:08 +08:00
parent e29fff0fed
commit 9d2385ccb4
No known key found for this signature in database
GPG key ID: E764BE00BE6E6408

View file

@ -43,6 +43,9 @@ export interface Game {
gog?: {
id?: number,
};
id?: {
flatpak?: string,
};
}
type OverriddenGame = Game & { omit?: boolean };
@ -179,14 +182,28 @@ function integrateSteamData(game: Game, appInfo: SteamGameCache[""] | undefined)
}
}
function integrateOverriddenData(game: Game, override?: OverriddenGame) {
if (override?.gog?.id) {
game.gog = { id: override?.gog?.id };
function integrateOverriddenData(game: Game, override: OverriddenGame) {
if (override.steam) {
game.steam = override.steam;
}
if (override.gog) {
game.gog = override.gog;
}
if (override.id) {
if (game.id === undefined) {
game.id = {};
}
if (override.id.flatpak) {
game.id.flatpak = override.id.flatpak;
}
}
}
function hasAnyData(game: Game): boolean {
return game.files !== undefined || game.registry !== undefined || game.steam?.id !== undefined || game.gog?.id !== undefined;
return game.files !== undefined || game.registry !== undefined || game.steam?.id !== undefined || game.gog?.id !== undefined || game.id !== undefined;
}
export class ManifestFile extends YamlFile<Manifest> {
@ -213,7 +230,9 @@ export class ManifestFile extends YamlFile<Manifest> {
const game: Game = {};
integrateWikiData(game, info);
integrateOverriddenData(game, overridden);
if (overridden) {
integrateOverriddenData(game, overridden);
}
if (!hasAnyData(game)) {
continue;
@ -224,6 +243,14 @@ export class ManifestFile extends YamlFile<Manifest> {
}
this.data[title] = game;
}
for (const [title, info] of Object.entries(override.data).sort()) {
if (title in this.data || info.omit) {
continue;
}
delete info.omit;
this.data[title] = info;
}
}
}