aboutsummaryrefslogtreecommitdiff
path: root/src/lib/mangadex.ts
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-08-26 22:29:03 -0700
committerFuwn <[email protected]>2023-08-26 22:29:03 -0700
commitb89d0e7dada186e31be37e62a7a75efc2dbe9c99 (patch)
tree8c9f6b5d7aa0f709c06d5eb45fbf763883b21c89 /src/lib/mangadex.ts
downloaddue.moe-b89d0e7dada186e31be37e62a7a75efc2dbe9c99.tar.xz
due.moe-b89d0e7dada186e31be37e62a7a75efc2dbe9c99.zip
feat: initial build
Diffstat (limited to 'src/lib/mangadex.ts')
-rw-r--r--src/lib/mangadex.ts69
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;
+};