diff options
| author | Fuwn <[email protected]> | 2023-12-10 02:19:28 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-12-10 02:34:52 -0800 |
| commit | e8bf266e5f487f7c444baf16bbabf1f4e4c2bdad (patch) | |
| tree | 7dff6a98a33392670e8b0085d7ea98904d1420a2 /src/lib/Media | |
| parent | feat(page): use video always (diff) | |
| download | due.moe-e8bf266e5f487f7c444baf16bbabf1f4e4c2bdad.tar.xz due.moe-e8bf266e5f487f7c444baf16bbabf1f4e4c2bdad.zip | |
feat(mangadex): add safe rate limits
Diffstat (limited to 'src/lib/Media')
| -rw-r--r-- | src/lib/Media/manga.ts | 50 |
1 files changed, 29 insertions, 21 deletions
diff --git a/src/lib/Media/manga.ts b/src/lib/Media/manga.ts index af08d4eb..b8afbc96 100644 --- a/src/lib/Media/manga.ts +++ b/src/lib/Media/manga.ts @@ -51,24 +51,28 @@ export const chapterCount = async ( return await tryRecentMediaActivities(); } - const mangadexData = await ( - await fetch( - `/api/mangadex/manga?english=${manga.title.english}&year=${manga.startDate.year}&romaji=${manga.title.romaji}&native=${manga.title.native}&status=${manga.status}` - ) - ).json(); + 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 (mangadexData['data'] === undefined || mangadexData['data'].length === 0) { + 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 = mangadexData['data'][0]['id']; - const lastChapterData = await (await fetch(`/api/mangadex/feed?id=${mangadexId}`)).json(); + 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 (lastChapterData['data'] === undefined || lastChapterData['data'].length === 0) { + if (lastChapterDataJson['data'] === undefined || lastChapterDataJson['data'].length === 0) return await tryRecentMediaActivities(); - } - let lastChapter = lastChapterData['data'][0]['attributes']['chapter']; + let lastChapter = lastChapterDataJson['data'][0]['attributes']['chapter']; let completedVolumes = null; if ((manga.mediaListEntry || { progress: 0 }).progress > lastChapter) { @@ -80,19 +84,23 @@ export const chapterCount = async ( } if (!settings.get().disableOutOfDateVolumeWarning) { - const volumeOfChapterData = await ( - await fetch( - `/api/mangadex/chapter?id=${mangadexId}&chapter=${manga.mediaListEntry?.progress}` - ) - ).json(); - let lastAvailableVolume = lastChapterData['data'][0]['attributes']['volume']; + 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 < lastChapterData['data'].length && lastAvailableVolume === null) { - if (lastChapterData['data'][chapterIndex]['attributes']['volume'] !== null) { - lastAvailableVolume = lastChapterData['data'][chapterIndex]['attributes']['volume']; + while (chapterIndex < lastChapterDataJson['data'].length && lastAvailableVolume === null) { + if (lastChapterDataJson['data'][chapterIndex]['attributes']['volume'] !== null) { + lastAvailableVolume = lastChapterDataJson['data'][chapterIndex]['attributes']['volume']; } chapterIndex += 1; |