From 248b378f01a6d301e8f522b7671b9c48a0481e22 Mon Sep 17 00:00:00 2001 From: tom5079 Date: Sat, 1 Jan 2022 16:56:15 +0900 Subject: [PATCH] Fixed some images not loading --- app/build.gradle | 4 +++- .../quaver/pupil/services/DownloadService.kt | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c104ba28..6790bf86 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -38,7 +38,7 @@ android { minSdkVersion 16 targetSdkVersion 30 versionCode 69 - versionName "5.1.28" + versionName "5.1.29" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true } @@ -128,6 +128,8 @@ dependencies { implementation "org.jsoup:jsoup:1.14.3" implementation "com.github.seven332:quickjs-android:0.1.0" + implementation "com.google.guava:guava:31.0.1-android" + implementation "xyz.quaver:documentfilex:0.7.1" implementation "xyz.quaver:floatingsearchview:1.1.7" diff --git a/app/src/main/java/xyz/quaver/pupil/services/DownloadService.kt b/app/src/main/java/xyz/quaver/pupil/services/DownloadService.kt index ec9b7633..af5b1bb0 100644 --- a/app/src/main/java/xyz/quaver/pupil/services/DownloadService.kt +++ b/app/src/main/java/xyz/quaver/pupil/services/DownloadService.kt @@ -28,6 +28,7 @@ import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.app.TaskStackBuilder import androidx.core.content.ContextCompat +import com.google.common.util.concurrent.RateLimiter import com.google.firebase.crashlytics.FirebaseCrashlytics import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -167,9 +168,25 @@ class DownloadService : Service() { } } + private val rateLimiter = RateLimiter.create(2.0) + private val rateLimitHost = Regex("..?\\.hitomi.la") + private val interceptor: PupilInterceptor = { chain -> val request = chain.request() - val response = chain.proceed(request) + + if (rateLimitHost.matches(request.url().host())) + rateLimiter.acquire() + + var response = chain.proceed(request) + var limit = 5 + + if (!response.isSuccessful && limit > 0) { + Thread.sleep(10000) + if (rateLimitHost.matches(request.url().host())) + rateLimiter.acquire() + response = chain.proceed(request) + limit -= 1 + } response.newBuilder() .body(response.body()?.let {