From b89d0e7dada186e31be37e62a7a75efc2dbe9c99 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sat, 26 Aug 2023 22:29:03 -0700 Subject: feat: initial build --- src/lib/mangadex.ts | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/lib/mangadex.ts (limited to 'src/lib/mangadex.ts') diff --git a/src/lib/mangadex.ts b/src/lib/mangadex.ts new file mode 100644 index 00000000..c5bd87c7 --- /dev/null +++ b/src/lib/mangadex.ts @@ -0,0 +1,69 @@ +import type { Media } from '$lib/AniList/media'; +import { chapterDatabase } from './chapterDatabase'; + +export const chapterCount = async (manga: Media): Promise => { + const chapters = await chapterDatabase.chapters.get(manga.id); + + if (chapters !== undefined) { + return chapters.chapters === -1 ? null : chapters.chapters; + } + + console.log( + `Caching ${manga.id} (${manga.title.english || manga.title.romaji || manga.title.native})` + ); + + let mangadexData = await ( + await fetch( + `https://api.mangadex.org/manga?title=${encodeURIComponent( + manga.title.english || manga.title.romaji || manga.title.native + )}&year=${manga.startDate.year}` + ) + ).json(); + + if (mangadexData['data'] === undefined || mangadexData['data'].length === 0) { + mangadexData = await ( + await fetch( + `https://api.mangadex.org/manga?title=${encodeURIComponent(manga.title.native)}&year=${ + manga.startDate.year + }` + ) + ).json(); + } + + if (mangadexData['data'] === undefined || mangadexData['data'].length === 0) { + await chapterDatabase.chapters.put({ + id: manga.id, + chapters: -1 + }); + + return null; + } + + const lastChapterData = await ( + await fetch( + `https://api.mangadex.org/manga/${mangadexData['data'][0]['id']}/feed?order[chapter]=desc` + ) + ).json(); + + if (lastChapterData['data'] === undefined || lastChapterData['data'].length === 0) { + await chapterDatabase.chapters.put({ + id: manga.id, + chapters: -1 + }); + + return null; + } + + let lastChapter = lastChapterData['data'][0]['attributes']['chapter']; + + if (lastChapter === 0) { + lastChapter = null; + } + + await chapterDatabase.chapters.put({ + id: manga.id, + chapters: lastChapter + }); + + return lastChapter; +}; -- cgit v1.2.3