You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.1 KiB
37 lines
1.1 KiB
import { SimpleCache } from "utils/cache"; |
|
import { MWPortableMedia } from "providers"; |
|
import { MWMediaSeasons } from "providers/types"; |
|
import { getProviderFromId } from "./helpers"; |
|
|
|
// cache |
|
const seasonCache = new SimpleCache<MWPortableMedia, MWMediaSeasons>(); |
|
seasonCache.setCompare( |
|
(a, b) => a.mediaId === b.mediaId && a.providerId === b.providerId |
|
); |
|
seasonCache.initialize(); |
|
|
|
/* |
|
** get season data from a (portable) media object, seasons and episodes will be sorted |
|
*/ |
|
export async function getSeasonDataFromMedia( |
|
media: MWPortableMedia |
|
): Promise<MWMediaSeasons> { |
|
const provider = getProviderFromId(media.providerId); |
|
if (!provider) { |
|
return { |
|
seasons: [], |
|
}; |
|
} |
|
|
|
if (seasonCache.has(media)) { |
|
return seasonCache.get(media) as MWMediaSeasons; |
|
} |
|
|
|
const seasonData = await provider.getSeasonDataFromMedia(media); |
|
seasonData.seasons.sort((a, b) => a.sort - b.sort); |
|
seasonData.seasons.forEach((s) => s.episodes.sort((a, b) => a.sort - b.sort)); |
|
|
|
// cache it |
|
seasonCache.set(media, seasonData, 60 * 60); // cache it for an hour |
|
return seasonData; |
|
}
|
|
|