From 9ad5f28246db93f6ef72e25d8b477e4f11865ddb Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sun, 17 Dec 2023 04:42:55 -0800 Subject: refactor(manga): move chapters and volumes --- src/lib/Media/Manga/chapters.ts | 107 ++++++++++++++++++++++++++++++++++++++ src/lib/Media/Manga/volumes.ts | 5 ++ src/lib/Media/manga.ts | 110 ---------------------------------------- 3 files changed, 112 insertions(+), 110 deletions(-) create mode 100644 src/lib/Media/Manga/chapters.ts create mode 100644 src/lib/Media/Manga/volumes.ts delete mode 100644 src/lib/Media/manga.ts (limited to 'src/lib/Media') diff --git a/src/lib/Media/Manga/chapters.ts b/src/lib/Media/Manga/chapters.ts new file mode 100644 index 00000000..4e2971c9 --- /dev/null +++ b/src/lib/Media/Manga/chapters.ts @@ -0,0 +1,107 @@ +import { recentMediaActivities, type Media } from '$lib/AniList/media'; +import settings from '../../../stores/settings'; +import type { UserIdentity } from '../../AniList/identity'; +import { chapterDatabase } from './database'; + +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, settings.get().guessMethod); + + await chapterDatabase.chapters.put({ + id: manga.id, + chapters: anilistData ? anilistData : -1, + volumes: null + }); + + return anilistData; + }; + + if (manga.format === 'NOVEL') return await tryRecentMediaActivities(); + + const mangadexData = await fetch( + `/api/mangadex/manga?english=${manga.title.english}&year=${manga.startDate.year}&romaji=${manga.title.romaji}&native=${manga.title.native}&status=${manga.status}` + ); + + if ((await mangadexData.clone().text()) === 'rate-limited') return -22; + + const mangadexDataJson = await mangadexData.json(); + + if (mangadexDataJson['data'] === undefined || mangadexDataJson['data'].length === 0) + return await tryRecentMediaActivities(); + + const mangadexId = mangadexDataJson['data'][0]['id']; + const lastChapterData = await fetch(`/api/mangadex/feed?id=${mangadexId}`); + + if ((await lastChapterData.clone().text()) === 'rate-limited') return -22; + + const lastChapterDataJson = await lastChapterData.json(); + + if (lastChapterDataJson['data'] === undefined || lastChapterDataJson['data'].length === 0) + return await tryRecentMediaActivities(); + + let lastChapter = lastChapterDataJson['data'][0]['attributes']['chapter']; + let completedVolumes = null; + + if ((manga.mediaListEntry || { progress: 0 }).progress > lastChapter) { + const anilistData = await recentMediaActivities(identity, manga, settings.get().guessMethod); + + if (anilistData !== null && anilistData > lastChapter) lastChapter = anilistData; + } + + if (!settings.get().disableOutOfDateVolumeWarning) { + const volumeOfChapterDataResponse = await fetch( + `/api/mangadex/chapter?id=${mangadexId}&chapter=${manga.mediaListEntry?.progress}` + ); + + if ((await volumeOfChapterDataResponse.clone().text()) === 'rate-limited') return -22; + + const volumeOfChapterData = await volumeOfChapterDataResponse.json(); + let lastAvailableVolume = lastChapterDataJson['data'][0]['attributes']['volume']; + + if (lastAvailableVolume === null) { + let chapterIndex = 0; + + while (chapterIndex < lastChapterDataJson['data'].length && lastAvailableVolume === null) { + if (lastChapterDataJson['data'][chapterIndex]['attributes']['volume'] !== null) + lastAvailableVolume = lastChapterDataJson['data'][chapterIndex]['attributes']['volume']; + + chapterIndex += 1; + } + } + + if (volumeOfChapterData['data'] !== undefined && volumeOfChapterData['data'].length > 0) { + const volumeOfChapter = volumeOfChapterData['data'][0]['attributes']['volume']; + + if (volumeOfChapter !== null) completedVolumes = volumeOfChapter; + + if (completedVolumes === volumeOfChapter) completedVolumes -= 1; + } + } + + if (lastChapter == 0) lastChapter = -1; + + await chapterDatabase.chapters.put({ + id: manga.id, + chapters: Number(lastChapter), + volumes: completedVolumes + }); + + return Number(lastChapter); +}; + +export const estimatedDayReading = (chapters: number) => chapters / 164; diff --git a/src/lib/Media/Manga/volumes.ts b/src/lib/Media/Manga/volumes.ts new file mode 100644 index 00000000..ea2c3ed9 --- /dev/null +++ b/src/lib/Media/Manga/volumes.ts @@ -0,0 +1,5 @@ +import type { Media } from '$lib/AniList/media'; +import { chapterDatabase } from './database'; + +export const volumeCount = async (manga: Media): Promise => + (await chapterDatabase.chapters.get(manga.id))?.volumes as number | null; diff --git a/src/lib/Media/manga.ts b/src/lib/Media/manga.ts deleted file mode 100644 index 95d45697..00000000 --- a/src/lib/Media/manga.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { recentMediaActivities, type Media } from '$lib/AniList/media'; -import settings from '../../stores/settings'; -import type { UserIdentity } from '../AniList/identity'; -import { chapterDatabase } from './Manga/database'; - -export const volumeCount = async (manga: Media): Promise => - (await chapterDatabase.chapters.get(manga.id))?.volumes as number | null; - -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, settings.get().guessMethod); - - await chapterDatabase.chapters.put({ - id: manga.id, - chapters: anilistData ? anilistData : -1, - volumes: null - }); - - return anilistData; - }; - - if (manga.format === 'NOVEL') return await tryRecentMediaActivities(); - - const mangadexData = await fetch( - `/api/mangadex/manga?english=${manga.title.english}&year=${manga.startDate.year}&romaji=${manga.title.romaji}&native=${manga.title.native}&status=${manga.status}` - ); - - if ((await mangadexData.clone().text()) === 'rate-limited') return -22; - - const mangadexDataJson = await mangadexData.json(); - - if (mangadexDataJson['data'] === undefined || mangadexDataJson['data'].length === 0) - return await tryRecentMediaActivities(); - - const mangadexId = mangadexDataJson['data'][0]['id']; - const lastChapterData = await fetch(`/api/mangadex/feed?id=${mangadexId}`); - - if ((await lastChapterData.clone().text()) === 'rate-limited') return -22; - - const lastChapterDataJson = await lastChapterData.json(); - - if (lastChapterDataJson['data'] === undefined || lastChapterDataJson['data'].length === 0) - return await tryRecentMediaActivities(); - - let lastChapter = lastChapterDataJson['data'][0]['attributes']['chapter']; - let completedVolumes = null; - - if ((manga.mediaListEntry || { progress: 0 }).progress > lastChapter) { - const anilistData = await recentMediaActivities(identity, manga, settings.get().guessMethod); - - if (anilistData !== null && anilistData > lastChapter) lastChapter = anilistData; - } - - if (!settings.get().disableOutOfDateVolumeWarning) { - const volumeOfChapterDataResponse = await fetch( - `/api/mangadex/chapter?id=${mangadexId}&chapter=${manga.mediaListEntry?.progress}` - ); - - if ((await volumeOfChapterDataResponse.clone().text()) === 'rate-limited') return -22; - - const volumeOfChapterData = await volumeOfChapterDataResponse.json(); - let lastAvailableVolume = lastChapterDataJson['data'][0]['attributes']['volume']; - - if (lastAvailableVolume === null) { - let chapterIndex = 0; - - while (chapterIndex < lastChapterDataJson['data'].length && lastAvailableVolume === null) { - if (lastChapterDataJson['data'][chapterIndex]['attributes']['volume'] !== null) - lastAvailableVolume = lastChapterDataJson['data'][chapterIndex]['attributes']['volume']; - - chapterIndex += 1; - } - } - - if (volumeOfChapterData['data'] !== undefined && volumeOfChapterData['data'].length > 0) { - const volumeOfChapter = volumeOfChapterData['data'][0]['attributes']['volume']; - - if (volumeOfChapter !== null) completedVolumes = volumeOfChapter; - - if (completedVolumes === volumeOfChapter) completedVolumes -= 1; - } - } - - if (lastChapter == 0) lastChapter = -1; - - await chapterDatabase.chapters.put({ - id: manga.id, - chapters: Number(lastChapter), - volumes: completedVolumes - }); - - return Number(lastChapter); -}; - -export const estimatedDayReading = (chapters: number) => chapters / 164; -- cgit v1.2.3