import { EmulatorPackageType, GameListFilterType } from '@/shared/constants'; import { SyncBailHook, AsyncSeriesHook, SyncWaterfallHook, AsyncSeriesBailHook, AsyncHook, AsyncParallelHook, SyncHook, AsyncSeriesWaterfallHook } from 'tapable'; export class GameHooks { /** override the launch command for an emulator * @param ctx.autoValidCommands The auto generated command for example based on the ES-DE listing * @param ctx.emulator The emulator ID if any * @param ctx.game.source The source of the game * @param ctx.game.sourceId The ID of the source. This could be for example the ROMM ID the game was * @returns The argument list to be used when running the emulator. * If no emulator bin in the command entry is found the actual command will be used as the bin. */ emulatorLaunch = new AsyncSeriesBailHook<[ctx: { autoValidCommand: CommandEntry; game: { source: string; id: number; }; }], string[] | undefined>(['ctx']); /** * Fetches and returns a list of games converted to frontend. * @param ctx.localGameIds This is local game ids in the format '@' */ fetchGames = new AsyncSeriesHook<[ctx: { query: GameListFilterType; games: FrontEndGameType[]; }]>(['ctx']); fetchGame = new AsyncSeriesBailHook<[ctx: { source: string; localGame?: FrontEndGameTypeDetailed; id: string; }], FrontEndGameTypeDetailed | undefined>(['ctx']); /** Get download file URLs * @param ctx.checksum Check if file already exists using checksums */ fetchDownloads = new AsyncSeriesBailHook<[ctx: { source: string; id: string; }], DownloadInfo | undefined>(['ctx']); fetchRecommendedGamesForGame = new AsyncSeriesHook<[ctx: { game: FrontEndGameTypeDetailed, games: (FrontEndGameType & { metadata?: any; })[]; }]>(['ctx']); fetchRecommendedGamesForEmulator = new AsyncSeriesHook<[cts: { emulator: EmulatorPackageType; systems: EmulatorSystem[]; games: FrontEndGameType[]; }]>(['ctx']); fetchPlatform = new AsyncSeriesBailHook<[ctx: { source: string; id: string; }], FrontEndPlatformType | undefined>(['ctx']); platformLookup = new AsyncSeriesBailHook<[ctx: { source: string; id: string; }], { slug: string; } | undefined>(['ctx']); fetchPlatforms = new AsyncSeriesHook<[ctx: { platforms: FrontEndPlatformType[]; }]>(['ctx']); updatePlayed = new AsyncSeriesWaterfallHook<[ctx: { source: string, id: string; }], boolean>(["ctx"]); fetchCollections = new AsyncSeriesHook<[ctx: { collections: FrontEndCollection[]; }]>(['ctx']); fetchCollection = new AsyncSeriesBailHook<[ctx: { source: string, id: string; }], FrontEndCollection | undefined>(['ctx']); }