diff options
| author | Fuwn <[email protected]> | 2023-12-15 13:31:34 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-12-15 13:31:34 -0800 |
| commit | f1e3313ea3dc0ccf2a443d6afd66f8663de819ba (patch) | |
| tree | b2115f8930224bb2801ef166d95cf387cb301819 /src/lib | |
| parent | feat(media): #dueinclude (diff) | |
| download | due.moe-f1e3313ea3dc0ccf2a443d6afd66f8663de819ba.tar.xz due.moe-f1e3313ea3dc0ccf2a443d6afd66f8663de819ba.zip | |
feat(media): multiple dueincludes
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/AniList/media.ts | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/lib/AniList/media.ts b/src/lib/AniList/media.ts index dcbefdaa..ff43732e 100644 --- a/src/lib/AniList/media.ts +++ b/src/lib/AniList/media.ts @@ -66,25 +66,34 @@ export const flattenLists = (lists: { name: string; entries: { media: Media }[] if (lists === undefined) return []; const flattenedList: Media[] = []; - const ignoredMediaIds: number[] = []; - const processedList = (list: Media[]) => + const markedMediaIds: number[] = []; + let dueInclude = false; + const processedList = (list: Media[], include: boolean) => list - .filter((media) => !ignoredMediaIds.includes(media.id)) + .filter((media) => + include ? markedMediaIds.includes(media.id) : !markedMediaIds.includes(media.id) + ) .filter( (item, index, self) => self.findIndex((itemToCompare) => itemToCompare.id === item.id) === index ); for (const list of lists) { - if (list.name.toLowerCase().includes('#dueinclude')) - return processedList(list.entries.map((entry) => entry.media)); + if (list.name.toLowerCase().includes('#dueinclude')) { + dueInclude = true; + + markedMediaIds.splice(0, markedMediaIds.length); + markedMediaIds.push(...list.entries.map((entry) => entry.media.id)); + } + + if (dueInclude) continue; if (list.name.toLowerCase().includes('#dueignore')) - ignoredMediaIds.push(...list.entries.map((entry) => entry.media.id)); + markedMediaIds.push(...list.entries.map((entry) => entry.media.id)); else flattenedList.push(...list.entries.map((entry) => entry.media)); } - return processedList(flattenedList); + return processedList(flattenedList, dueInclude); }; const collectionQueryTemplate = (type: Type, userId: number, includeCompleted: boolean) => |