diff options
| author | Fuwn <[email protected]> | 2023-12-23 16:45:09 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-12-23 16:45:09 -0800 |
| commit | 7d59db9b9fdb9e84596d5f7b2b2f68d3ca3230e6 (patch) | |
| tree | b4e2e692dd84a78ea6b456fe9821b6a1280e12c3 /src/lib/AniList/media.ts | |
| parent | feat(wrapped): filter duplicates in merge (diff) | |
| download | due.moe-7d59db9b9fdb9e84596d5f7b2b2f68d3ca3230e6.tar.xz due.moe-7d59db9b9fdb9e84596d5f7b2b2f68d3ca3230e6.zip | |
refactor(media): use options object
Diffstat (limited to 'src/lib/AniList/media.ts')
| -rw-r--r-- | src/lib/AniList/media.ts | 66 |
1 files changed, 50 insertions, 16 deletions
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<Media[]> => { + 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(); |