Allow manifest-override.yaml to override more IDs and to add games
This commit is contained in:
parent
e29fff0fed
commit
9d2385ccb4
1 changed files with 32 additions and 5 deletions
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue