aboutsummaryrefslogtreecommitdiff
path: root/src/lib/AniList
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/AniList')
-rw-r--r--src/lib/AniList/media.ts66
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();