diff options
| author | Fuwn <[email protected]> | 2023-08-26 22:29:03 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-08-26 22:29:03 -0700 |
| commit | b89d0e7dada186e31be37e62a7a75efc2dbe9c99 (patch) | |
| tree | 8c9f6b5d7aa0f709c06d5eb45fbf763883b21c89 /src/lib/mangadex.ts | |
| download | due.moe-b89d0e7dada186e31be37e62a7a75efc2dbe9c99.tar.xz due.moe-b89d0e7dada186e31be37e62a7a75efc2dbe9c99.zip | |
feat: initial build
Diffstat (limited to 'src/lib/mangadex.ts')
| -rw-r--r-- | src/lib/mangadex.ts | 69 |
1 files changed, 69 insertions, 0 deletions
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<number | null> => { + 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; +}; |