From 00095848c8c82b4db9a52f0e85ac29b0f991e99b Mon Sep 17 00:00:00 2001 From: Fuwn Date: Thu, 14 Sep 2023 14:39:22 -0700 Subject: refactor: move media to folder --- src/lib/Media/manga.ts | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/lib/Media/manga.ts (limited to 'src/lib/Media/manga.ts') diff --git a/src/lib/Media/manga.ts b/src/lib/Media/manga.ts new file mode 100644 index 00000000..7150bf60 --- /dev/null +++ b/src/lib/Media/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 => { + 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); +}; -- cgit v1.2.3