mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Add convenience extension functions for rate limit interceptors
To be included in extension-lib 1.3 as a replacement for the lib that's currently compiled in tachiyomi-extensions.
This commit is contained in:
		| @@ -6,7 +6,7 @@ import eu.kanade.tachiyomi.data.database.models.Track | ||||
| import eu.kanade.tachiyomi.data.track.model.TrackSearch | ||||
| import eu.kanade.tachiyomi.network.POST | ||||
| import eu.kanade.tachiyomi.network.await | ||||
| import eu.kanade.tachiyomi.network.interceptor.RateLimitInterceptor | ||||
| import eu.kanade.tachiyomi.network.interceptor.rateLimit | ||||
| import eu.kanade.tachiyomi.network.jsonMime | ||||
| import eu.kanade.tachiyomi.network.parseAs | ||||
| import eu.kanade.tachiyomi.util.lang.withIOContext | ||||
| @@ -25,13 +25,13 @@ import kotlinx.serialization.json.putJsonObject | ||||
| import okhttp3.OkHttpClient | ||||
| import okhttp3.RequestBody.Companion.toRequestBody | ||||
| import java.util.Calendar | ||||
| import java.util.concurrent.TimeUnit.MINUTES | ||||
| import java.util.concurrent.TimeUnit | ||||
|  | ||||
| class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { | ||||
|  | ||||
|     private val authClient = client.newBuilder() | ||||
|         .addInterceptor(interceptor) | ||||
|         .addInterceptor(RateLimitInterceptor(85, 1, MINUTES)) | ||||
|         .rateLimit(permits = 85, period = 1, unit = TimeUnit.MINUTES) | ||||
|         .build() | ||||
|  | ||||
|     suspend fun addLibManga(track: Track): Track { | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.network.interceptor | ||||
|  | ||||
| import android.os.SystemClock | ||||
| import okhttp3.Interceptor | ||||
| import okhttp3.OkHttpClient | ||||
| import okhttp3.Response | ||||
| import java.util.concurrent.TimeUnit | ||||
|  | ||||
| @@ -17,10 +18,16 @@ import java.util.concurrent.TimeUnit | ||||
|  * @param period {Long}   The limiting duration. Defaults to 1. | ||||
|  * @param unit {TimeUnit} The unit of time for the period. Defaults to seconds. | ||||
|  */ | ||||
| class RateLimitInterceptor( | ||||
| fun OkHttpClient.Builder.rateLimit( | ||||
|     permits: Int, | ||||
|     period: Long = 1, | ||||
|     unit: TimeUnit = TimeUnit.SECONDS, | ||||
| ) = addInterceptor(RateLimitInterceptor(permits, period, unit)) | ||||
|  | ||||
| private class RateLimitInterceptor( | ||||
|     private val permits: Int, | ||||
|     private val period: Long = 1, | ||||
|     private val unit: TimeUnit = TimeUnit.SECONDS | ||||
|     period: Long, | ||||
|     unit: TimeUnit, | ||||
| ) : Interceptor { | ||||
|  | ||||
|     private val requestQueue = ArrayList<Long>(permits) | ||||
|   | ||||
| @@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.network.interceptor | ||||
| import android.os.SystemClock | ||||
| import okhttp3.HttpUrl | ||||
| import okhttp3.Interceptor | ||||
| import okhttp3.OkHttpClient | ||||
| import okhttp3.Response | ||||
| import java.util.concurrent.TimeUnit | ||||
|  | ||||
| @@ -19,11 +20,18 @@ import java.util.concurrent.TimeUnit | ||||
|  * @param period {Long}   The limiting duration. Defaults to 1. | ||||
|  * @param unit {TimeUnit} The unit of time for the period. Defaults to seconds. | ||||
|  */ | ||||
| fun OkHttpClient.Builder.rateLimitHost( | ||||
|     httpUrl: HttpUrl, | ||||
|     permits: Int, | ||||
|     period: Long = 1, | ||||
|     unit: TimeUnit = TimeUnit.SECONDS, | ||||
| ) = addInterceptor(SpecificHostRateLimitInterceptor(httpUrl, permits, period, unit)) | ||||
|  | ||||
| class SpecificHostRateLimitInterceptor( | ||||
|     private val httpUrl: HttpUrl, | ||||
|     httpUrl: HttpUrl, | ||||
|     private val permits: Int, | ||||
|     private val period: Long = 1, | ||||
|     private val unit: TimeUnit = TimeUnit.SECONDS | ||||
|     period: Long, | ||||
|     unit: TimeUnit, | ||||
| ) : Interceptor { | ||||
|  | ||||
|     private val requestQueue = ArrayList<Long>(permits) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user