aboutsummaryrefslogtreecommitdiff
path: root/src/lib/Media/manga.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/Media/manga.ts')
-rw-r--r--src/lib/Media/manga.ts44
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);