diff options
Diffstat (limited to 'src/lib/Media/manga.ts')
| -rw-r--r-- | src/lib/Media/manga.ts | 44 |
1 files changed, 39 insertions, 5 deletions
diff --git a/src/lib/Media/manga.ts b/src/lib/Media/manga.ts index 3c0cf837..13f251eb 100644 --- a/src/lib/Media/manga.ts +++ b/src/lib/Media/manga.ts @@ -11,6 +11,9 @@ export const pruneAllManga = async () => { await chapterDatabase.chapters.bulkDelete(ids); }; +export const volumeCount = async (manga: Media): Promise<number | null> => + (await chapterDatabase.chapters.get(manga.id))?.volumes as number | null; + export const chapterCount = async ( identity: UserIdentity, manga: Media, @@ -36,7 +39,8 @@ export const chapterCount = async ( await chapterDatabase.chapters.put({ id: manga.id, - chapters: anilistData ? anilistData : -1 + chapters: anilistData ? anilistData : -1, + volumes: null }); return anilistData; @@ -56,15 +60,15 @@ export const chapterCount = async ( return await tryRecentMediaActivities(); } - const lastChapterData = await ( - await fetch(`/api/mangadex/feed?id=${mangadexData['data'][0]['id']}`) - ).json(); + const mangadexId = mangadexData['data'][0]['id']; + const lastChapterData = await (await fetch(`/api/mangadex/feed?id=${mangadexId}`)).json(); if (lastChapterData['data'] === undefined || lastChapterData['data'].length === 0) { return await tryRecentMediaActivities(); } let lastChapter = lastChapterData['data'][0]['attributes']['chapter']; + let completedVolumes = null; if ((manga.mediaListEntry || { progress: 0 }).progress > lastChapter) { const anilistData = await recentMediaActivities(identity, manga); @@ -74,13 +78,43 @@ export const chapterCount = async ( } } + const volumeOfChapterData = await ( + await fetch(`/api/mangadex/chapter?id=${mangadexId}&chapter=${manga.mediaListEntry?.progress}`) + ).json(); + let lastAvailableVolume = lastChapterData['data'][0]['attributes']['volume']; + + if (lastAvailableVolume === null) { + let chapterIndex = 0; + + while (chapterIndex < lastChapterData['data'].length && lastAvailableVolume === null) { + if (lastChapterData['data'][chapterIndex]['attributes']['volume'] !== null) { + lastAvailableVolume = lastChapterData['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) + chapters: Number(lastChapter), + volumes: completedVolumes }); return Number(lastChapter); |