diff options
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) => |