import { recentMediaActivities, type Media } from '$lib/AniList/media'; import type { UserIdentity } from '../AniList/identity'; import { chapterDatabase } from './chapters'; export const chapterCount = async ( identity: UserIdentity, manga: Media, preferActivity = false ): Promise => { 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); };