From 7d59db9b9fdb9e84596d5f7b2b2f68d3ca3230e6 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sat, 23 Dec 2023 16:45:09 -0800 Subject: refactor(media): use options object --- src/lib/AniList/media.ts | 66 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 16 deletions(-) (limited to 'src/lib/AniList/media.ts') diff --git a/src/lib/AniList/media.ts b/src/lib/AniList/media.ts index 6fc83296..b1ea2f11 100644 --- a/src/lib/AniList/media.ts +++ b/src/lib/AniList/media.ts @@ -62,9 +62,16 @@ export interface Media { coverImage: { extraLarge: string; }; + tags: { + name: string; + }[]; + genres: string[]; } -export const flattenLists = (lists: { name: string; entries: { media: Media }[] }[]) => { +export const flattenLists = ( + lists: { name: string; entries: { media: Media }[] }[], + all = false +) => { if (lists === undefined) return []; const flattenedList: Media[] = []; @@ -80,19 +87,21 @@ export const flattenLists = (lists: { name: string; entries: { media: Media }[] self.findIndex((itemToCompare) => itemToCompare.id === item.id) === index ); - for (const list of lists) { - if (list.name.toLowerCase().includes('#dueinclude')) { - dueInclude = true; + if (!all) { + for (const list of lists) { + if (list.name.toLowerCase().includes('#dueinclude')) { + dueInclude = true; - markedMediaIds.splice(0, markedMediaIds.length); - markedMediaIds.push(...list.entries.map((entry) => entry.media.id)); - } + markedMediaIds.splice(0, markedMediaIds.length); + markedMediaIds.push(...list.entries.map((entry) => entry.media.id)); + } - if (dueInclude) continue; + if (dueInclude) continue; - if (list.name.toLowerCase().includes('#dueignore')) - markedMediaIds.push(...list.entries.map((entry) => entry.media.id)); - else flattenedList.push(...list.entries.map((entry) => entry.media)); + if (list.name.toLowerCase().includes('#dueignore')) + markedMediaIds.push(...list.entries.map((entry) => entry.media.id)); + else flattenedList.push(...list.entries.map((entry) => entry.media)); + } } return processedList(flattenedList, dueInclude); @@ -107,7 +116,8 @@ const collectionQueryTemplate = (type: Type, userId: number, includeCompleted: b lists { name entries { media { - id idMal status type episodes chapters format duration synonyms + id idMal status type episodes chapters format duration synonyms genres + tags { name } title { romaji english native } nextAiringEpisode { episode airingAt } mediaListEntry { @@ -122,15 +132,39 @@ const collectionQueryTemplate = (type: Type, userId: number, includeCompleted: b } }`; +interface CollectionOptions { + includeCompleted?: boolean; + forcePrune?: boolean; +} + +interface NonNullCollectionOptions { + includeCompleted: boolean; + forcePrune: boolean; +} + +const assignDefaultOptions = (options: CollectionOptions) => { + const nonNullOptions: NonNullCollectionOptions = { + includeCompleted: false, + forcePrune: false + }; + + if (options.includeCompleted !== undefined) + nonNullOptions.includeCompleted = options.includeCompleted; + if (options.forcePrune !== undefined) nonNullOptions.forcePrune = options.forcePrune; + + return nonNullOptions; +}; + export const mediaListCollection = async ( anilistAuthorisation: AniListAuthorisation, userIdentity: UserIdentity, type: Type, mediaCache: string | undefined, currentLastPruneAt: string | number, - forcePrune = false, - includeCompleted = false + inputOptions: CollectionOptions = {} ): Promise => { + const options = assignDefaultOptions(inputOptions); + let currentCacheMinutes; settings.subscribe((value) => (currentCacheMinutes = value.cacheMinutes)); @@ -142,7 +176,7 @@ export const mediaListCollection = async ( if ( (new Date().getTime() - Number(currentLastPruneAt)) / 1000 / 60 > Number(currentCacheMinutes) || - forcePrune + options.forcePrune ) { if (type === Type.Anime) { lastPruneTimes.setKey('anime', new Date().getTime()); @@ -167,7 +201,7 @@ export const mediaListCollection = async ( Accept: 'application/json' }, body: JSON.stringify({ - query: collectionQueryTemplate(type, userIdentity.id, includeCompleted) + query: collectionQueryTemplate(type, userIdentity.id, options.includeCompleted) }) }) ).json(); -- cgit v1.2.3