import { recentMediaActivities, type Media } from '$lib/AniList/media'; import manga from '../../stores/manga'; import type { UserIdentity } from '../AniList/identity'; import { chapterDatabase } from './chapters'; export const pruneAllManga = async () => { const all = await chapterDatabase.chapters.toArray(); const ids = all.map((m) => m.id); manga.set(''); await chapterDatabase.chapters.bulkDelete(ids); }; export const chapterCount = async ( identity: UserIdentity, manga: Media, disableGuessing: boolean // 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 () => { if (disableGuessing) { return null; } const anilistData = await recentMediaActivities(identity, manga); await chapterDatabase.chapters.put({ id: manga.id, chapters: anilistData ? anilistData : -1 }); return anilistData; }; if (manga.format === 'NOVEL') { return await tryRecentMediaActivities(); } 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); };