From c920c8e32b160a6b9fde94db688f5240753cbf2c Mon Sep 17 00:00:00 2001 From: Alessandro Jean Date: Wed, 14 Apr 2021 10:58:52 -0300 Subject: [PATCH] Add rate limiting to more sources. (#6543) --- src/pt/bruttal/build.gradle | 7 ++++++- .../tachiyomi/extension/pt/bruttal/Bruttal.kt | 9 ++++++++- src/pt/centraldemangas/build.gradle | 6 +++++- .../pt/centraldemangas/CentralDeMangas.kt | 17 +++++++++-------- src/pt/goldenmangas/build.gradle | 6 +++++- .../extension/pt/goldenmangas/GoldenMangas.kt | 8 ++++++-- src/pt/hipercool/build.gradle | 6 +++++- .../extension/pt/hipercool/Hipercool.kt | 9 +++++++-- src/pt/hqdragon/build.gradle | 6 +++++- .../tachiyomi/extension/pt/hqdragon/HQDragon.kt | 6 +++++- src/pt/hqnow/build.gradle | 6 +++++- .../tachiyomi/extension/pt/hqnow/HQNow.kt | 6 +++++- src/pt/mangayabu/build.gradle | 6 +++++- .../extension/pt/mangayabu/MangaYabu.kt | 15 ++++++++------- src/pt/mundohentai/build.gradle | 6 +++++- .../extension/pt/mundohentai/MundoHentai.kt | 9 +++++++-- src/pt/mundomangakun/build.gradle | 6 +++++- .../extension/pt/mundomangakun/MundoMangaKun.kt | 9 ++++++++- src/pt/saikaiscan/build.gradle | 6 +++++- .../extension/pt/saikaiscan/SaikaiScan.kt | 10 +++++++++- src/pt/socialcomics/build.gradle | 6 +++++- .../extension/pt/socialcomics/SocialComics.kt | 7 +++++-- src/pt/taosect/build.gradle | 6 +++++- .../tachiyomi/extension/pt/taosect/TaoSect.kt | 10 +++++++++- src/pt/tsukimangas/build.gradle | 2 +- .../extension/pt/tsukimangas/TsukiMangas.kt | 2 +- src/pt/unionmangas/build.gradle | 6 +++++- .../extension/pt/unionmangas/UnionMangas.kt | 16 ++++++++-------- src/pt/yesmangas/build.gradle | 6 +++++- .../extension/pt/yesmangas/YesMangas.kt | 9 ++++++++- src/pt/zinnes/build.gradle | 6 +++++- .../tachiyomi/extension/pt/zinnes/Zinnes.kt | 10 +++++++++- 32 files changed, 189 insertions(+), 56 deletions(-) diff --git a/src/pt/bruttal/build.gradle b/src/pt/bruttal/build.gradle index 4cba5e11e..ab3eacca6 100644 --- a/src/pt/bruttal/build.gradle +++ b/src/pt/bruttal/build.gradle @@ -5,8 +5,13 @@ ext { extName = 'Bruttal' pkgNameSuffix = 'pt.bruttal' extClass = '.Bruttal' - extVersionCode = 1 + extVersionCode = 2 libVersion = '1.2' } + +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/bruttal/src/eu/kanade/tachiyomi/extension/pt/bruttal/Bruttal.kt b/src/pt/bruttal/src/eu/kanade/tachiyomi/extension/pt/bruttal/Bruttal.kt index 2b83d1da8..00a1c7ccd 100644 --- a/src/pt/bruttal/src/eu/kanade/tachiyomi/extension/pt/bruttal/Bruttal.kt +++ b/src/pt/bruttal/src/eu/kanade/tachiyomi/extension/pt/bruttal/Bruttal.kt @@ -7,6 +7,7 @@ import com.github.salomonbrys.kotson.string import com.google.gson.JsonElement import com.google.gson.JsonObject import com.google.gson.JsonParser +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.source.model.FilterList @@ -16,9 +17,11 @@ import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.HttpSource import okhttp3.Headers +import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import rx.Observable +import java.util.concurrent.TimeUnit class Bruttal : HttpSource() { @@ -30,6 +33,10 @@ class Bruttal : HttpSource() { override val supportsLatest = false + override val client: OkHttpClient = network.client.newBuilder() + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) + .build() + override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("Referer", "$baseUrl/bruttal/") .add("User-Agent", USER_AGENT) @@ -181,7 +188,7 @@ class Bruttal : HttpSource() { companion object { private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + - "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" private val JSON_PARSER by lazy { JsonParser() } } diff --git a/src/pt/centraldemangas/build.gradle b/src/pt/centraldemangas/build.gradle index cf434dbee..5748efea0 100644 --- a/src/pt/centraldemangas/build.gradle +++ b/src/pt/centraldemangas/build.gradle @@ -5,8 +5,12 @@ ext { extName = 'Central de Mangás' pkgNameSuffix = 'pt.centraldemangas' extClass = '.CentralDeMangas' - extVersionCode = 3 + extVersionCode = 4 libVersion = '1.2' } +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/centraldemangas/src/eu/kanade/tachiyomi/extension/pt/centraldemangas/CentralDeMangas.kt b/src/pt/centraldemangas/src/eu/kanade/tachiyomi/extension/pt/centraldemangas/CentralDeMangas.kt index 3d90213be..2221b90a9 100644 --- a/src/pt/centraldemangas/src/eu/kanade/tachiyomi/extension/pt/centraldemangas/CentralDeMangas.kt +++ b/src/pt/centraldemangas/src/eu/kanade/tachiyomi/extension/pt/centraldemangas/CentralDeMangas.kt @@ -5,6 +5,7 @@ import com.github.salomonbrys.kotson.get import com.github.salomonbrys.kotson.string import com.google.gson.JsonArray import com.google.gson.JsonParser +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.source.model.FilterList @@ -38,13 +39,12 @@ class CentralDeMangas : ParsedHttpSource() { override val supportsLatest = true - // Sometimes the site is very slow. - override val client: OkHttpClient = - network.client.newBuilder() - .connectTimeout(3, TimeUnit.MINUTES) - .readTimeout(3, TimeUnit.MINUTES) - .writeTimeout(3, TimeUnit.MINUTES) - .build() + override val client: OkHttpClient = network.client.newBuilder() + .connectTimeout(3, TimeUnit.MINUTES) + .readTimeout(3, TimeUnit.MINUTES) + .writeTimeout(3, TimeUnit.MINUTES) + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) + .build() override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("User-Agent", USER_AGENT) @@ -195,7 +195,8 @@ class CentralDeMangas : ParsedHttpSource() { private fun Response.asJsonArray(): JsonArray = JSON_PARSER.parse(body()!!.string()).array companion object { - private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" + private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" private const val COVER_CDN = "http://capas.centraldemangas.com.br" private const val SCRIPT_URL_BEGIN = "var urlSulfix = '" diff --git a/src/pt/goldenmangas/build.gradle b/src/pt/goldenmangas/build.gradle index cde3ba41a..13723a103 100644 --- a/src/pt/goldenmangas/build.gradle +++ b/src/pt/goldenmangas/build.gradle @@ -5,8 +5,12 @@ ext { extName = 'Golden Mangás' pkgNameSuffix = 'pt.goldenmangas' extClass = '.GoldenMangas' - extVersionCode = 8 + extVersionCode = 9 libVersion = '1.2' } +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/goldenmangas/src/eu/kanade/tachiyomi/extension/pt/goldenmangas/GoldenMangas.kt b/src/pt/goldenmangas/src/eu/kanade/tachiyomi/extension/pt/goldenmangas/GoldenMangas.kt index 87b62b6a8..1b637e391 100644 --- a/src/pt/goldenmangas/src/eu/kanade/tachiyomi/extension/pt/goldenmangas/GoldenMangas.kt +++ b/src/pt/goldenmangas/src/eu/kanade/tachiyomi/extension/pt/goldenmangas/GoldenMangas.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.extension.pt.goldenmangas +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.Page @@ -34,6 +35,7 @@ class GoldenMangas : ParsedHttpSource() { .connectTimeout(1, TimeUnit.MINUTES) .readTimeout(1, TimeUnit.MINUTES) .writeTimeout(1, TimeUnit.MINUTES) + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .build() override fun headersBuilder(): Headers.Builder = Headers.Builder() @@ -172,10 +174,12 @@ class GoldenMangas : ParsedHttpSource() { private fun String.withoutLanguage(): String = replace(FLAG_REGEX, "").trim() companion object { - private const val ACCEPT = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + private const val ACCEPT = "text/html,application/xhtml+xml,application/xml;q=0.9," + + "image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" private const val ACCEPT_IMAGE = "image/webp,image/apng,image/*,*/*;q=0.8" private const val ACCEPT_LANGUAGE = "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7,es;q=0.6,gl;q=0.5" - private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36" + private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" private val FLAG_REGEX = "\\((Pt[-/]br|Scan)\\)".toRegex(RegexOption.IGNORE_CASE) diff --git a/src/pt/hipercool/build.gradle b/src/pt/hipercool/build.gradle index 1afe4d90a..8acd7b957 100644 --- a/src/pt/hipercool/build.gradle +++ b/src/pt/hipercool/build.gradle @@ -5,9 +5,13 @@ ext { extName = 'HipercooL' pkgNameSuffix = 'pt.hipercool' extClass = '.Hipercool' - extVersionCode = 5 + extVersionCode = 6 libVersion = '1.2' containsNsfw = true } +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/hipercool/src/eu/kanade/tachiyomi/extension/pt/hipercool/Hipercool.kt b/src/pt/hipercool/src/eu/kanade/tachiyomi/extension/pt/hipercool/Hipercool.kt index 4d5db20bd..442b3502d 100644 --- a/src/pt/hipercool/src/eu/kanade/tachiyomi/extension/pt/hipercool/Hipercool.kt +++ b/src/pt/hipercool/src/eu/kanade/tachiyomi/extension/pt/hipercool/Hipercool.kt @@ -10,6 +10,7 @@ import com.google.gson.JsonArray import com.google.gson.JsonObject import com.google.gson.JsonParser import eu.kanade.tachiyomi.annotations.Nsfw +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.asObservableSuccess @@ -30,6 +31,7 @@ import rx.Observable import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale +import java.util.concurrent.TimeUnit @Nsfw class Hipercool : HttpSource() { @@ -45,7 +47,9 @@ class Hipercool : HttpSource() { override val supportsLatest = true - override val client: OkHttpClient = network.cloudflareClient + override val client: OkHttpClient = network.cloudflareClient.newBuilder() + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) + .build() override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("User-Agent", USER_AGENT) @@ -245,7 +249,8 @@ class Hipercool : HttpSource() { companion object { private const val STATIC_URL = "https://static.hiper.cool" - private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.141 Safari/537.36" + private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" private const val DEFAULT_COUNT = 40 diff --git a/src/pt/hqdragon/build.gradle b/src/pt/hqdragon/build.gradle index 1cf4716c1..95c8f2fba 100644 --- a/src/pt/hqdragon/build.gradle +++ b/src/pt/hqdragon/build.gradle @@ -5,8 +5,12 @@ ext { extName = 'HQ Dragon' pkgNameSuffix = 'pt.hqdragon' extClass = '.HQDragon' - extVersionCode = 2 + extVersionCode = 3 libVersion = '1.2' } +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/hqdragon/src/eu/kanade/tachiyomi/extension/pt/hqdragon/HQDragon.kt b/src/pt/hqdragon/src/eu/kanade/tachiyomi/extension/pt/hqdragon/HQDragon.kt index 5afa7b2e3..3970ca387 100644 --- a/src/pt/hqdragon/src/eu/kanade/tachiyomi/extension/pt/hqdragon/HQDragon.kt +++ b/src/pt/hqdragon/src/eu/kanade/tachiyomi/extension/pt/hqdragon/HQDragon.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.extension.pt.hqdragon +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.source.model.FilterList @@ -15,6 +16,7 @@ import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element +import java.util.concurrent.TimeUnit class HQDragon : ParsedHttpSource() { @@ -26,7 +28,9 @@ class HQDragon : ParsedHttpSource() { override val supportsLatest = true - override val client: OkHttpClient = network.cloudflareClient + override val client: OkHttpClient = network.cloudflareClient.newBuilder() + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) + .build() // Popular diff --git a/src/pt/hqnow/build.gradle b/src/pt/hqnow/build.gradle index 049ac6a2d..07aaf7cad 100644 --- a/src/pt/hqnow/build.gradle +++ b/src/pt/hqnow/build.gradle @@ -5,8 +5,12 @@ ext { extName = 'HQ Now!' pkgNameSuffix = 'pt.hqnow' extClass = '.HQNow' - extVersionCode = 2 + extVersionCode = 3 libVersion = '1.2' } +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/hqnow/src/eu/kanade/tachiyomi/extension/pt/hqnow/HQNow.kt b/src/pt/hqnow/src/eu/kanade/tachiyomi/extension/pt/hqnow/HQNow.kt index edd848e42..8745e5d4a 100644 --- a/src/pt/hqnow/src/eu/kanade/tachiyomi/extension/pt/hqnow/HQNow.kt +++ b/src/pt/hqnow/src/eu/kanade/tachiyomi/extension/pt/hqnow/HQNow.kt @@ -4,6 +4,7 @@ import com.github.salomonbrys.kotson.fromJson import com.github.salomonbrys.kotson.get import com.google.gson.Gson import com.google.gson.JsonObject +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList @@ -16,6 +17,7 @@ import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.RequestBody import okhttp3.Response +import java.util.concurrent.TimeUnit class HQNow : HttpSource() { @@ -28,7 +30,9 @@ class HQNow : HttpSource() { override val supportsLatest = true - override val client: OkHttpClient = network.cloudflareClient + override val client: OkHttpClient = network.cloudflareClient.newBuilder() + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) + .build() private val gson = Gson() diff --git a/src/pt/mangayabu/build.gradle b/src/pt/mangayabu/build.gradle index 98cc92bad..6427a0710 100644 --- a/src/pt/mangayabu/build.gradle +++ b/src/pt/mangayabu/build.gradle @@ -5,8 +5,12 @@ ext { extName = 'MangaYabu!' pkgNameSuffix = 'pt.mangayabu' extClass = '.MangaYabu' - extVersionCode = 5 + extVersionCode = 6 libVersion = '1.2' } +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/mangayabu/src/eu/kanade/tachiyomi/extension/pt/mangayabu/MangaYabu.kt b/src/pt/mangayabu/src/eu/kanade/tachiyomi/extension/pt/mangayabu/MangaYabu.kt index e192f90ed..2173720a4 100644 --- a/src/pt/mangayabu/src/eu/kanade/tachiyomi/extension/pt/mangayabu/MangaYabu.kt +++ b/src/pt/mangayabu/src/eu/kanade/tachiyomi/extension/pt/mangayabu/MangaYabu.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.extension.pt.mangayabu +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.source.model.FilterList @@ -33,12 +34,12 @@ class MangaYabu : ParsedHttpSource() { override val supportsLatest = true - override val client: OkHttpClient = - network.client.newBuilder() - .connectTimeout(2, TimeUnit.MINUTES) - .readTimeout(2, TimeUnit.MINUTES) - .writeTimeout(2, TimeUnit.MINUTES) - .build() + override val client: OkHttpClient = network.client.newBuilder() + .connectTimeout(2, TimeUnit.MINUTES) + .readTimeout(2, TimeUnit.MINUTES) + .writeTimeout(2, TimeUnit.MINUTES) + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) + .build() override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("User-Agent", USER_AGENT) @@ -176,7 +177,7 @@ class MangaYabu : ParsedHttpSource() { companion object { private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + - "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36" + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" private val FLAG_REGEX = "\\((Pt[-/]br|Scan)\\)".toRegex(RegexOption.IGNORE_CASE) diff --git a/src/pt/mundohentai/build.gradle b/src/pt/mundohentai/build.gradle index 8c51b4105..bfc49afcf 100644 --- a/src/pt/mundohentai/build.gradle +++ b/src/pt/mundohentai/build.gradle @@ -5,9 +5,13 @@ ext { extName = 'Mundo Hentai' pkgNameSuffix = 'pt.mundohentai' extClass = '.MundoHentai' - extVersionCode = 1 + extVersionCode = 2 libVersion = '1.2' containsNsfw = true } +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/mundohentai/src/eu/kanade/tachiyomi/extension/pt/mundohentai/MundoHentai.kt b/src/pt/mundohentai/src/eu/kanade/tachiyomi/extension/pt/mundohentai/MundoHentai.kt index b80715aad..b484d9866 100644 --- a/src/pt/mundohentai/src/eu/kanade/tachiyomi/extension/pt/mundohentai/MundoHentai.kt +++ b/src/pt/mundohentai/src/eu/kanade/tachiyomi/extension/pt/mundohentai/MundoHentai.kt @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.extension.pt.mundohentai import eu.kanade.tachiyomi.annotations.Nsfw +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList @@ -14,6 +15,7 @@ import okhttp3.OkHttpClient import okhttp3.Request import org.jsoup.nodes.Document import org.jsoup.nodes.Element +import java.util.concurrent.TimeUnit @Nsfw class MundoHentai : ParsedHttpSource() { @@ -26,7 +28,9 @@ class MundoHentai : ParsedHttpSource() { override val supportsLatest = false - override val client: OkHttpClient = network.cloudflareClient + override val client: OkHttpClient = network.cloudflareClient.newBuilder() + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) + .build() override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("User-Agent", USER_AGENT) @@ -183,6 +187,7 @@ class MundoHentai : ParsedHttpSource() { override fun latestUpdatesNextPageSelector(): String? = throw UnsupportedOperationException("Not used") companion object { - private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36" + private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" } } diff --git a/src/pt/mundomangakun/build.gradle b/src/pt/mundomangakun/build.gradle index f9f30844b..b4215060a 100644 --- a/src/pt/mundomangakun/build.gradle +++ b/src/pt/mundomangakun/build.gradle @@ -5,8 +5,12 @@ ext { extName = 'Mundo Mangá-Kun' pkgNameSuffix = 'pt.mundomangakun' extClass = '.MundoMangaKun' - extVersionCode = 1 + extVersionCode = 2 libVersion = '1.2' } +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/mundomangakun/src/eu/kanade/tachiyomi/extension/pt/mundomangakun/MundoMangaKun.kt b/src/pt/mundomangakun/src/eu/kanade/tachiyomi/extension/pt/mundomangakun/MundoMangaKun.kt index 1d951fe55..ab06f481a 100644 --- a/src/pt/mundomangakun/src/eu/kanade/tachiyomi/extension/pt/mundomangakun/MundoMangaKun.kt +++ b/src/pt/mundomangakun/src/eu/kanade/tachiyomi/extension/pt/mundomangakun/MundoMangaKun.kt @@ -4,6 +4,7 @@ import com.github.salomonbrys.kotson.array import com.github.salomonbrys.kotson.obj import com.github.salomonbrys.kotson.string import com.google.gson.JsonParser +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList @@ -13,11 +14,13 @@ import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.ParsedHttpSource import okhttp3.Headers import okhttp3.HttpUrl +import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element import java.lang.UnsupportedOperationException +import java.util.concurrent.TimeUnit class MundoMangaKun : ParsedHttpSource() { @@ -29,6 +32,10 @@ class MundoMangaKun : ParsedHttpSource() { override val supportsLatest = false + override val client: OkHttpClient = network.client.newBuilder() + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) + .build() + override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("User-Agent", USER_AGENT) .add("Origin", baseUrl) @@ -230,7 +237,7 @@ class MundoMangaKun : ParsedHttpSource() { companion object { private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + - "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" private val JSON_PARSER by lazy { JsonParser() } } diff --git a/src/pt/saikaiscan/build.gradle b/src/pt/saikaiscan/build.gradle index b73d10d1e..72b1412b1 100644 --- a/src/pt/saikaiscan/build.gradle +++ b/src/pt/saikaiscan/build.gradle @@ -5,8 +5,12 @@ ext { extName = 'Saikai Scan' pkgNameSuffix = 'pt.saikaiscan' extClass = '.SaikaiScan' - extVersionCode = 4 + extVersionCode = 5 libVersion = '1.2' } +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/saikaiscan/src/eu/kanade/tachiyomi/extension/pt/saikaiscan/SaikaiScan.kt b/src/pt/saikaiscan/src/eu/kanade/tachiyomi/extension/pt/saikaiscan/SaikaiScan.kt index 222456220..100a89fc3 100644 --- a/src/pt/saikaiscan/src/eu/kanade/tachiyomi/extension/pt/saikaiscan/SaikaiScan.kt +++ b/src/pt/saikaiscan/src/eu/kanade/tachiyomi/extension/pt/saikaiscan/SaikaiScan.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.extension.pt.saikaiscan +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.MangasPage @@ -9,10 +10,12 @@ import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.ParsedHttpSource import okhttp3.Headers import okhttp3.HttpUrl +import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element +import java.util.concurrent.TimeUnit class SaikaiScan : ParsedHttpSource() { @@ -27,6 +30,10 @@ class SaikaiScan : ParsedHttpSource() { override val supportsLatest = true + override val client: OkHttpClient = network.client.newBuilder() + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) + .build() + override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("User-Agent", USER_AGENT) .add("Origin", baseUrl) @@ -136,7 +143,8 @@ class SaikaiScan : ParsedHttpSource() { private fun removeLabel(info: String) = info.substringAfter(":") companion object { - private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" + private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" private val CHAPTER_REGEX = "Capítulo (\\d+)".toRegex() } } diff --git a/src/pt/socialcomics/build.gradle b/src/pt/socialcomics/build.gradle index 07588aa91..a4e903355 100644 --- a/src/pt/socialcomics/build.gradle +++ b/src/pt/socialcomics/build.gradle @@ -5,8 +5,12 @@ ext { extName = 'Social Comics' pkgNameSuffix = 'pt.socialcomics' extClass = '.SocialComics' - extVersionCode = 1 + extVersionCode = 2 libVersion = '1.2' } +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/socialcomics/src/eu/kanade/tachiyomi/extension/pt/socialcomics/SocialComics.kt b/src/pt/socialcomics/src/eu/kanade/tachiyomi/extension/pt/socialcomics/SocialComics.kt index e0cfad51d..1b7d39dc9 100644 --- a/src/pt/socialcomics/src/eu/kanade/tachiyomi/extension/pt/socialcomics/SocialComics.kt +++ b/src/pt/socialcomics/src/eu/kanade/tachiyomi/extension/pt/socialcomics/SocialComics.kt @@ -15,6 +15,7 @@ import com.github.salomonbrys.kotson.string import com.google.gson.JsonElement import com.google.gson.JsonObject import com.google.gson.JsonParser +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.source.ConfigurableSource @@ -37,6 +38,7 @@ import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.IOException import java.lang.UnsupportedOperationException +import java.util.concurrent.TimeUnit import androidx.preference.EditTextPreference as AndroidXEditTextPreference import androidx.preference.PreferenceScreen as AndroidXPreferenceScreen @@ -51,7 +53,8 @@ class SocialComics : HttpSource(), ConfigurableSource { override val supportsLatest = false override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .addInterceptor { authIntercept(it) } + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) + .addInterceptor(::authIntercept) .build() override fun headersBuilder(): Headers.Builder = Headers.Builder() @@ -411,7 +414,7 @@ class SocialComics : HttpSource(), ConfigurableSource { private const val ACCEPT_JSON = "application/json, text/plain, */*" private const val ACCEPT_IMAGE = "image/avif,image/webp,image/apng,image/*,*/*;q=0.8" private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + - "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36" + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" private val JSON_PARSER by lazy { JsonParser() } diff --git a/src/pt/taosect/build.gradle b/src/pt/taosect/build.gradle index 0331c7fa2..7ed534858 100644 --- a/src/pt/taosect/build.gradle +++ b/src/pt/taosect/build.gradle @@ -5,8 +5,12 @@ ext { extName = 'Tao Sect' pkgNameSuffix = 'pt.taosect' extClass = '.TaoSect' - extVersionCode = 1 + extVersionCode = 2 libVersion = '1.2' } +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSect.kt b/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSect.kt index ebbe8291a..ad7588f84 100644 --- a/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSect.kt +++ b/src/pt/taosect/src/eu/kanade/tachiyomi/extension/pt/taosect/TaoSect.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.extension.pt.taosect +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList @@ -9,6 +10,7 @@ import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.ParsedHttpSource import okhttp3.Headers import okhttp3.HttpUrl +import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document @@ -17,6 +19,7 @@ import java.lang.UnsupportedOperationException import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale +import java.util.concurrent.TimeUnit class TaoSect : ParsedHttpSource() { @@ -28,6 +31,10 @@ class TaoSect : ParsedHttpSource() { override val supportsLatest = false + override val client: OkHttpClient = network.client.newBuilder() + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) + .build() + override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("User-Agent", USER_AGENT) .add("Origin", baseUrl) @@ -256,7 +263,8 @@ class TaoSect : ParsedHttpSource() { ) companion object { - private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36" + private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" private val DATE_FORMATTER by lazy { SimpleDateFormat("(dd/MM/yyyy)", Locale.ENGLISH) } diff --git a/src/pt/tsukimangas/build.gradle b/src/pt/tsukimangas/build.gradle index 104ceae20..66261aab4 100644 --- a/src/pt/tsukimangas/build.gradle +++ b/src/pt/tsukimangas/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Tsuki Mangás' pkgNameSuffix = 'pt.tsukimangas' extClass = '.TsukiMangas' - extVersionCode = 12 + extVersionCode = 13 libVersion = '1.2' } diff --git a/src/pt/tsukimangas/src/eu/kanade/tachiyomi/extension/pt/tsukimangas/TsukiMangas.kt b/src/pt/tsukimangas/src/eu/kanade/tachiyomi/extension/pt/tsukimangas/TsukiMangas.kt index cca8e0c65..cba005089 100644 --- a/src/pt/tsukimangas/src/eu/kanade/tachiyomi/extension/pt/tsukimangas/TsukiMangas.kt +++ b/src/pt/tsukimangas/src/eu/kanade/tachiyomi/extension/pt/tsukimangas/TsukiMangas.kt @@ -40,7 +40,7 @@ class TsukiMangas : HttpSource() { override val supportsLatest = true override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .addInterceptor(RateLimitInterceptor(3, 1, TimeUnit.SECONDS)) + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .build() override fun headersBuilder(): Headers.Builder = Headers.Builder() diff --git a/src/pt/unionmangas/build.gradle b/src/pt/unionmangas/build.gradle index 1cefb9da8..822e24f20 100644 --- a/src/pt/unionmangas/build.gradle +++ b/src/pt/unionmangas/build.gradle @@ -5,8 +5,12 @@ ext { extName = 'Union Mangás' pkgNameSuffix = 'pt.unionmangas' extClass = '.UnionMangas' - extVersionCode = 18 + extVersionCode = 19 libVersion = '1.2' } +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangas.kt b/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangas.kt index a61bf16b8..27af5a079 100644 --- a/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangas.kt +++ b/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangas.kt @@ -5,6 +5,7 @@ import com.github.salomonbrys.kotson.obj import com.github.salomonbrys.kotson.string import com.google.gson.JsonObject import com.google.gson.JsonParser +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.source.model.FilterList @@ -39,13 +40,12 @@ class UnionMangas : ParsedHttpSource() { override val supportsLatest = true - // Sometimes the site is very slow. - override val client: OkHttpClient = - network.cloudflareClient.newBuilder() - .connectTimeout(3, TimeUnit.MINUTES) - .readTimeout(3, TimeUnit.MINUTES) - .writeTimeout(3, TimeUnit.MINUTES) - .build() + override val client: OkHttpClient = network.cloudflareClient.newBuilder() + .connectTimeout(3, TimeUnit.MINUTES) + .readTimeout(3, TimeUnit.MINUTES) + .writeTimeout(3, TimeUnit.MINUTES) + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) + .build() override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("User-Agent", USER_AGENT) @@ -222,7 +222,7 @@ class UnionMangas : ParsedHttpSource() { companion object { private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + - "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36" + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" private val JSON_PARSER by lazy { JsonParser() } diff --git a/src/pt/yesmangas/build.gradle b/src/pt/yesmangas/build.gradle index ff75ebb96..69273f976 100644 --- a/src/pt/yesmangas/build.gradle +++ b/src/pt/yesmangas/build.gradle @@ -5,8 +5,12 @@ ext { extName = 'YES Mangás' pkgNameSuffix = 'pt.yesmangas' extClass = '.YesMangas' - extVersionCode = 6 + extVersionCode = 7 libVersion = '1.2' } +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/yesmangas/src/eu/kanade/tachiyomi/extension/pt/yesmangas/YesMangas.kt b/src/pt/yesmangas/src/eu/kanade/tachiyomi/extension/pt/yesmangas/YesMangas.kt index 116236397..cb2560fbd 100644 --- a/src/pt/yesmangas/src/eu/kanade/tachiyomi/extension/pt/yesmangas/YesMangas.kt +++ b/src/pt/yesmangas/src/eu/kanade/tachiyomi/extension/pt/yesmangas/YesMangas.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.extension.pt.yesmangas +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.Page @@ -8,10 +9,12 @@ import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.ParsedHttpSource import okhttp3.Headers import okhttp3.HttpUrl +import okhttp3.OkHttpClient import okhttp3.Request import org.jsoup.nodes.Document import org.jsoup.nodes.Element import org.jsoup.select.Elements +import java.util.concurrent.TimeUnit class YesMangas : ParsedHttpSource() { @@ -26,6 +29,10 @@ class YesMangas : ParsedHttpSource() { override val supportsLatest = true + override val client: OkHttpClient = network.cloudflareClient.newBuilder() + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) + .build() + override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("User-Agent", USER_AGENT) .add("Origin", baseUrl) @@ -131,7 +138,7 @@ class YesMangas : ParsedHttpSource() { companion object { private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + - "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" private val LANG_REGEX = "( )?\\((PT-)?BR\\)".toRegex() private val IMAGE_REGEX = "_(small|medium|xmedium|xlarge)\\.".toRegex() diff --git a/src/pt/zinnes/build.gradle b/src/pt/zinnes/build.gradle index 25a63e75a..ca5da6c44 100644 --- a/src/pt/zinnes/build.gradle +++ b/src/pt/zinnes/build.gradle @@ -5,8 +5,12 @@ ext { extName = 'Zinnes' pkgNameSuffix = 'pt.zinnes' extClass = '.Zinnes' - extVersionCode = 2 + extVersionCode = 3 libVersion = '1.2' } +dependencies { + implementation project(':lib-ratelimit') +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/zinnes/src/eu/kanade/tachiyomi/extension/pt/zinnes/Zinnes.kt b/src/pt/zinnes/src/eu/kanade/tachiyomi/extension/pt/zinnes/Zinnes.kt index 36b411132..fdc0b4318 100644 --- a/src/pt/zinnes/src/eu/kanade/tachiyomi/extension/pt/zinnes/Zinnes.kt +++ b/src/pt/zinnes/src/eu/kanade/tachiyomi/extension/pt/zinnes/Zinnes.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.extension.pt.zinnes +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.MangasPage @@ -10,6 +11,7 @@ import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.util.asJsoup import okhttp3.Headers import okhttp3.HttpUrl +import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document @@ -17,6 +19,7 @@ import org.jsoup.nodes.Element import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale +import java.util.concurrent.TimeUnit class Zinnes : ParsedHttpSource() { @@ -31,6 +34,10 @@ class Zinnes : ParsedHttpSource() { override val supportsLatest = false + override val client: OkHttpClient = network.client.newBuilder() + .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) + .build() + override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("User-Agent", USER_AGENT) .add("Referer", baseUrl) @@ -135,7 +142,8 @@ class Zinnes : ParsedHttpSource() { } companion object { - private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" + private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" private val ID_REGEX = "var titulo = \\{\"id\":\"(\\d+)\"".toRegex() private val FILES_REGEX = "var arquivos = \\[(.*)\\];".toRegex()