import contentCache from "./methods/contentCache"; import { MWMedia, MWMediaProvider, MWMediaStream, MWPortableMedia, MWQuery, } from "./types"; export interface MWWrappedMediaProvider extends MWMediaProvider { getMediaFromPortable(media: MWPortableMedia): Promise; searchForMedia(query: MWQuery): Promise; getStream(media: MWPortableMedia): Promise; } export function WrapProvider( provider: MWMediaProvider ): MWWrappedMediaProvider { return { ...provider, async getMediaFromPortable(media: MWPortableMedia): Promise { // consult cache first const output = contentCache.get(media); if (output) { output.seasonId = media.seasonId; output.episodeId = media.episodeId; return output; } const mediaObject = { ...(await provider.getMediaFromPortable(media)), providerId: provider.id, mediaType: media.mediaType, }; contentCache.set(media, mediaObject, 60 * 60); return mediaObject; }, async searchForMedia(query: MWQuery): Promise { return (await provider.searchForMedia(query)).map((m) => ({ ...m, providerId: provider.id, mediaType: query.type, })); }, }; }