From 08e71f345497705af76bac857e132a606c2e8efa Mon Sep 17 00:00:00 2001
From: Alessandro Jean <alessandrojean@gmail.com>
Date: Wed, 14 Apr 2021 10:19:58 -0300
Subject: [PATCH] Make rate limiting apply to all requests in MH (#6542)

* Make rate limit apply to images in MH.

* Update block message.
---
 src/pt/mangahost/build.gradle                 |  2 +-
 .../extension/pt/mangahost/MangaHost.kt       | 20 +++++++++++--------
 2 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/pt/mangahost/build.gradle b/src/pt/mangahost/build.gradle
index a77c8e579..4bc3c2b4f 100644
--- a/src/pt/mangahost/build.gradle
+++ b/src/pt/mangahost/build.gradle
@@ -5,7 +5,7 @@ ext {
     extName = 'Mangá Host'
     pkgNameSuffix = 'pt.mangahost'
     extClass = '.MangaHost'
-    extVersionCode = 22
+    extVersionCode = 23
     libVersion = '1.2'
 }
 
diff --git a/src/pt/mangahost/src/eu/kanade/tachiyomi/extension/pt/mangahost/MangaHost.kt b/src/pt/mangahost/src/eu/kanade/tachiyomi/extension/pt/mangahost/MangaHost.kt
index e28f060a7..0181c0b74 100644
--- a/src/pt/mangahost/src/eu/kanade/tachiyomi/extension/pt/mangahost/MangaHost.kt
+++ b/src/pt/mangahost/src/eu/kanade/tachiyomi/extension/pt/mangahost/MangaHost.kt
@@ -38,11 +38,10 @@ class MangaHost : ParsedHttpSource() {
     override val supportsLatest = true
 
     override val client: OkHttpClient = network.cloudflareClient.newBuilder()
-        .addInterceptor(::rateLimitIntercept)
+        .addInterceptor(RateLimitInterceptor(1, 3, TimeUnit.SECONDS))
+        .addInterceptor(::blockMessageIntercept)
         .build()
 
-    private val rateLimitInterceptor = RateLimitInterceptor(1, 3, TimeUnit.SECONDS)
-
     override fun headersBuilder(): Headers.Builder = Headers.Builder()
         .add("Accept", ACCEPT)
         .add("Accept-Language", ACCEPT_LANGUAGE)
@@ -197,12 +196,15 @@ class MangaHost : ParsedHttpSource() {
         return GET(page.imageUrl!!, newHeaders)
     }
 
-    private fun rateLimitIntercept(chain: Interceptor.Chain): Response {
-        return if (chain.request().url().toString().contains(CDN_REGEX)) {
-            chain.proceed(chain.request())
-        } else {
-            rateLimitInterceptor.intercept(chain)
+    private fun blockMessageIntercept(chain: Interceptor.Chain): Response {
+        val response = chain.proceed(chain.request())
+
+        if (!response.isSuccessful && response.code() == 403) {
+            response.close()
+            throw Exception(BLOCK_MESSAGE)
         }
+
+        return response
     }
 
     private fun Call.asObservableIgnoreCode(code: Int): Observable<Response> {
@@ -246,6 +248,8 @@ class MangaHost : ParsedHttpSource() {
         private val IMAGE_REGEX = "_(small|medium|xmedium)\\.".toRegex()
         private val CDN_REGEX = "/mangas_files/.*\\.jpg".toRegex()
 
+        private const val BLOCK_MESSAGE = "O site está bloqueando o Tachiyomi. Migre para outra fonte caso o problema persistir."
+
         private val DATE_FORMAT by lazy {
             SimpleDateFormat("MMM dd, yyyy", Locale.ENGLISH)
         }