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