diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/Anilist.kt b/app/src/main/java/ani/dantotsu/connections/anilist/Anilist.kt index b0f2ba81..562d9b0a 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/Anilist.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/Anilist.kt @@ -10,6 +10,7 @@ import ani.dantotsu.currContext import ani.dantotsu.openLinkInBrowser import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefName +import ani.dantotsu.toast import ani.dantotsu.tryWithSuspend import java.io.File import java.util.Calendar @@ -30,6 +31,8 @@ object Anilist { var genres: ArrayList? = null var tags: Map>? = null + var rateLimitReset: Long = 0 + val sortBy = listOf( "SCORE_DESC", "POPULARITY_DESC", @@ -122,6 +125,11 @@ object Anilist { cache: Int? = null ): T? { return tryWithSuspend { + if (rateLimitReset > System.currentTimeMillis() / 1000) { + toast("Rate limited. Try after ${rateLimitReset - (System.currentTimeMillis() / 1000)} seconds") + throw Exception("Rate limited after ${rateLimitReset - (System.currentTimeMillis() / 1000)} seconds") + } + val data = mapOf( "query" to query, "variables" to variables @@ -140,6 +148,16 @@ object Anilist { data = data, cacheTime = cache ?: 10 ) + if (json.code == 429) { + val retry = json.headers["Retry-After"]?.toIntOrNull() ?: -1 + val passedLimitReset = json.headers["X-RateLimit-Reset"]?.toLongOrNull() ?: 0 + if (retry > 0) { + rateLimitReset = passedLimitReset + } + + toast("Rate limited. Try after $retry seconds") + throw Exception("Rate limited after $retry seconds") + } if (!json.text.startsWith("{")) throw Exception(currContext()?.getString(R.string.anilist_down)) if (show) println("Response : ${json.text}") json.parsed() diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt index 6d12c1d5..4f503529 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt @@ -700,7 +700,7 @@ query (${"$"}page: Int = 1, ${"$"}id: Int, ${"$"}type: MediaType, ${"$"}isAdult: page = pageInfo.currentPage.toString().toIntOrNull() ?: 0, hasNextPage = pageInfo.hasNextPage == true, ) - } else snackString(currContext()?.getString(R.string.empty_response)) + } return null }