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 | |
| 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')
| -rw-r--r-- | src/lib/AniList/media.ts | 66 | ||||
| -rw-r--r-- | src/lib/List/Anime/DueAnimeList.svelte | 11 | ||||
| -rw-r--r-- | src/lib/List/Manga/MangaListTemplate.svelte | 22 | ||||
| -rw-r--r-- | src/lib/Media/Anime/cache.ts | 4 | ||||
| -rw-r--r-- | src/lib/Tools/Wrapped.svelte | 12 |
5 files changed, 70 insertions, 45 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(); diff --git a/src/lib/List/Anime/DueAnimeList.svelte b/src/lib/List/Anime/DueAnimeList.svelte index e431ac89..efd4b31a 100644 --- a/src/lib/List/Anime/DueAnimeList.svelte +++ b/src/lib/List/Anime/DueAnimeList.svelte @@ -19,14 +19,9 @@ const keyCacher = setInterval(() => { startTime = performance.now(); endTime = -1; - animeLists = mediaListCollection( - user, - identity, - Type.Anime, - $anime, - $lastPruneTimes.anime, - true - ); + animeLists = mediaListCollection(user, identity, Type.Anime, $anime, $lastPruneTimes.anime, { + forcePrune: true + }); }, $settings.cacheMinutes * 1000 * 60); onMount(async () => { diff --git a/src/lib/List/Manga/MangaListTemplate.svelte b/src/lib/List/Manga/MangaListTemplate.svelte index 5409a3d9..d580343c 100644 --- a/src/lib/List/Manga/MangaListTemplate.svelte +++ b/src/lib/List/Manga/MangaListTemplate.svelte @@ -148,14 +148,9 @@ if (foundEntry && foundEntry.mediaListEntry) foundEntry.mediaListEntry.progress = (progress || 0) + 1; - mangaLists = mediaListCollection( - user, - identity, - Type.Manga, - $manga, - $lastPruneTimes.manga, - true - ); + mangaLists = mediaListCollection(user, identity, Type.Manga, $manga, $lastPruneTimes.manga, { + forcePrune: true + }); pendingUpdate = null; }); }; @@ -165,14 +160,9 @@ endTime = -1; pruneAllManga().then(() => { - mangaLists = mediaListCollection( - user, - identity, - Type.Manga, - $manga, - $lastPruneTimes.manga, - true - ); + mangaLists = mediaListCollection(user, identity, Type.Manga, $manga, $lastPruneTimes.manga, { + forcePrune: true + }); }); }; </script> diff --git a/src/lib/Media/Anime/cache.ts b/src/lib/Media/Anime/cache.ts index c423a419..60164f85 100644 --- a/src/lib/Media/Anime/cache.ts +++ b/src/lib/Media/Anime/cache.ts @@ -5,7 +5,9 @@ import lastPruneTimes from '../../../stores/lastPruneTimes'; import type { AniListAuthorisation, UserIdentity } from '../../AniList/identity'; export const cleanCache = (user: AniListAuthorisation, identity: UserIdentity) => - mediaListCollection(user, identity, Type.Anime, get(anime), get(lastPruneTimes).anime, true); + mediaListCollection(user, identity, Type.Anime, get(anime), get(lastPruneTimes).anime, { + forcePrune: true + }); export const updateMedia = (id: number, progress: number | undefined, callback: () => void) => { fetch(`/api/anilist/increment?id=${id}&progress=${(progress || 0) + 1}`).then(callback); diff --git a/src/lib/Tools/Wrapped.svelte b/src/lib/Tools/Wrapped.svelte index 56c17942..6c7e16d1 100644 --- a/src/lib/Tools/Wrapped.svelte +++ b/src/lib/Tools/Wrapped.svelte @@ -189,8 +189,10 @@ Type.Anime, $anime, $lastPruneTimes.anime, - true, - true + { + forcePrune: true, + includeCompleted: true + } ) ) .filter( @@ -213,8 +215,10 @@ Type.Manga, $manga, $lastPruneTimes.manga, - true, - true + { + forcePrune: true, + includeCompleted: true + } ) ) .filter( |