diff options
Diffstat (limited to 'src/lib/manga.ts')
| -rw-r--r-- | src/lib/manga.ts | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/lib/manga.ts b/src/lib/manga.ts new file mode 100644 index 00000000..5c73aced --- /dev/null +++ b/src/lib/manga.ts @@ -0,0 +1,69 @@ +import { recentMediaActivities, type Media } from '$lib/AniList/media'; +import type { UserIdentity } from './AniList/identity'; +import { chapterDatabase } from './chapterDatabase'; + +export const chapterCount = async ( + identity: UserIdentity, + manga: Media, + preferActivity = false +): Promise<number | null> => { + const chapters = await chapterDatabase.chapters.get(manga.id); + + if (chapters !== undefined) { + return chapters.chapters === -1 ? null : chapters.chapters; + } + + if (preferActivity) { + return await recentMediaActivities(identity, manga); + } + + const tryRecentMediaActivities = async () => { + const anilistData = await recentMediaActivities(identity, manga); + + await chapterDatabase.chapters.put({ + id: manga.id, + chapters: anilistData ? anilistData : -1 + }); + + return anilistData; + }; + + const mangadexData = await ( + await fetch( + `/api/mangadex/manga?english=${manga.title.english}&year=${manga.startDate.year}&romaji=${manga.title.romaji}&native=${manga.title.native}` + ) + ).json(); + + if (mangadexData['data'] === undefined || mangadexData['data'].length === 0) { + return await tryRecentMediaActivities(); + } + + const lastChapterData = await ( + await fetch(`/api/mangadex/feed?id=${mangadexData['data'][0]['id']}`) + ).json(); + + if (lastChapterData['data'] === undefined || lastChapterData['data'].length === 0) { + return await tryRecentMediaActivities(); + } + + let lastChapter = lastChapterData['data'][0]['attributes']['chapter']; + + if ((manga.mediaListEntry || { progress: 0 }).progress > lastChapter) { + const anilistData = await recentMediaActivities(identity, manga); + + if (anilistData !== null && anilistData > lastChapter) { + lastChapter = anilistData; + } + } + + if (lastChapter == 0) { + lastChapter = -1; + } + + await chapterDatabase.chapters.put({ + id: manga.id, + chapters: Number(lastChapter) + }); + + return Number(lastChapter); +}; |