Make rate limit more harsher in Brazilian sources (#8208)

* Make rate limit more harsher in Brazilian single sources.

* Make rate limit more harsher in Brazilian multisrc sources.
This commit is contained in:
Alessandro Jean 2021-07-21 12:25:36 -03:00 committed by GitHub
parent 233746b94d
commit 58e83d29cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
86 changed files with 151 additions and 143 deletions

View File

@ -18,7 +18,7 @@ class BaixarHentai : FoolSlide(
override val id: Long = 8908032188831949972 override val id: Long = 8908032188831949972
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun mangaDetailsParse(document: Document): SManga { override fun mangaDetailsParse(document: Document): SManga {

View File

@ -15,7 +15,7 @@ class ArgosScan : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaSelector() = "div.page-item-detail.manga" override fun popularMangaSelector() = "div.page-item-detail.manga"

View File

@ -15,7 +15,7 @@ class ArthurScan : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaSelector() = "div.page-item-detail.manga" override fun popularMangaSelector() = "div.page-item-detail.manga"

View File

@ -17,7 +17,7 @@ class BananaMecanica : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
// [...document.querySelectorAll('input[name="genre[]"]')] // [...document.querySelectorAll('input[name="genre[]"]')]

View File

@ -17,7 +17,7 @@ class BlManhwaClub : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
// [...document.querySelectorAll('div.genres li a')] // [...document.querySelectorAll('div.genres li a')]

View File

@ -17,7 +17,7 @@ class CafeComYaoi : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
// [...document.querySelectorAll('input[name="genre[]"]')] // [...document.querySelectorAll('input[name="genre[]"]')]

View File

@ -15,7 +15,7 @@ class CeriseScans : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaSelector() = "div.page-item-detail.manga" override fun popularMangaSelector() = "div.page-item-detail.manga"

View File

@ -15,7 +15,7 @@ class CervoScanlator : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaSelector() = "div.page-item-detail.manga" override fun popularMangaSelector() = "div.page-item-detail.manga"

View File

@ -21,7 +21,7 @@ class DarkYueRealm : Madara(
override val id: Long = 593455310609863709 override val id: Long = 593455310609863709
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun mangaDetailsRequest(manga: SManga): Request { override fun mangaDetailsRequest(manga: SManga): Request {

View File

@ -15,7 +15,7 @@ class DiskusScan : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override val altName: String = "Nome alternativo: " override val altName: String = "Nome alternativo: "

View File

@ -19,7 +19,7 @@ class DreamUnionScan : Madara(
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(::authWarningIntercept) .addInterceptor(::authWarningIntercept)
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override val altName: String = "Nome alternativo: " override val altName: String = "Nome alternativo: "

View File

@ -17,7 +17,7 @@ class DropeScan : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manga/page/$page/?m_orderby=views", headers) override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manga/page/$page/?m_orderby=views", headers)

View File

@ -15,6 +15,6 @@ class FDMScan : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
} }

View File

@ -15,7 +15,7 @@ class FenixScanlator : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
// [...document.querySelectorAll('input[name="genre[]"]')] // [...document.querySelectorAll('input[name="genre[]"]')]

View File

@ -19,7 +19,7 @@ class FudidoScanlator : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaSelector() = "div.page-item-detail.manga" override fun popularMangaSelector() = "div.page-item-detail.manga"

View File

@ -15,6 +15,6 @@ class FurioScans : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
} }

View File

@ -17,7 +17,7 @@ class GeassHentai : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override val altName: String = "Nome alternativo: " override val altName: String = "Nome alternativo: "

View File

@ -17,7 +17,7 @@ class GloryScans : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
// [...document.querySelectorAll('input[name="genre[]"]')] // [...document.querySelectorAll('input[name="genre[]"]')]

View File

@ -17,7 +17,7 @@ class ImperioDosOtakus : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaSelector() = "div.page-item-detail.manga" override fun popularMangaSelector() = "div.page-item-detail.manga"

View File

@ -20,7 +20,7 @@ class LimaScans : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override val altName: String = "Nome alternativo: " override val altName: String = "Nome alternativo: "

View File

@ -15,6 +15,6 @@ class LittleMonsterScan : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
} }

View File

@ -18,7 +18,7 @@ class MangaTeca : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun headersBuilder(): Headers.Builder = Headers.Builder() override fun headersBuilder(): Headers.Builder = Headers.Builder()

View File

@ -15,6 +15,6 @@ class MarkScans : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
} }

View File

@ -15,7 +15,7 @@ class ModeScanlator : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaSelector() = "div.page-item-detail.manga" override fun popularMangaSelector() = "div.page-item-detail.manga"

View File

@ -15,7 +15,7 @@ class MoonWitchInLove : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override val altName: String = "Nome alternativo: " override val altName: String = "Nome alternativo: "

View File

@ -15,7 +15,7 @@ class NekoBreakerScan : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override val altName: String = "Nome alternativo: " override val altName: String = "Nome alternativo: "

View File

@ -15,7 +15,7 @@ class OffScan : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaSelector() = "div.page-item-detail.manga" override fun popularMangaSelector() = "div.page-item-detail.manga"

View File

@ -15,6 +15,6 @@ class OrigamiOrpheans : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
} }

View File

@ -15,7 +15,7 @@ class PrismaScans : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override val altName = "Nome alternativo: " override val altName = "Nome alternativo: "

View File

@ -15,6 +15,6 @@ class ProjetoScanlator : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
} }

View File

@ -15,6 +15,6 @@ class RandomScan : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
} }

View File

@ -15,7 +15,7 @@ class RedRibbonScanlator : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override val altName: String = "Nome alternativo: " override val altName: String = "Nome alternativo: "

View File

@ -15,7 +15,7 @@ class Sinensis : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override val altName: String = "Nome alternativo: " override val altName: String = "Nome alternativo: "

View File

@ -17,7 +17,7 @@ class StageComics : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaSelector() = "div.page-item-detail.manga" override fun popularMangaSelector() = "div.page-item-detail.manga"

View File

@ -18,7 +18,7 @@ class SweetTimeScan : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaSelector() = "div.page-item-detail.manga" override fun popularMangaSelector() = "div.page-item-detail.manga"

View File

@ -15,6 +15,6 @@ class ThreeQueensScanlator : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
} }

View File

@ -18,7 +18,7 @@ class TsundokuTraducoes : Madara(
override val id: Long = 3941383635597527601 override val id: Long = 3941383635597527601
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaSelector() = "div.page-item-detail.manga" override fun popularMangaSelector() = "div.page-item-detail.manga"

View File

@ -15,7 +15,7 @@ class VapoScan : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override val altName: String = "Nome alternativo: " override val altName: String = "Nome alternativo: "

View File

@ -15,7 +15,7 @@ class Visbellum : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override val altName: String = "Nome alternativo: " override val altName: String = "Nome alternativo: "

View File

@ -15,7 +15,7 @@ class WarQueenScan : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaSelector() = "div.page-item-detail.manga" override fun popularMangaSelector() = "div.page-item-detail.manga"

View File

@ -15,6 +15,6 @@ class WinterScan : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
} }

View File

@ -15,7 +15,7 @@ class Wonderland : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override val popularMangaUrlSelector = "div.post-title a:not([target])" override val popularMangaUrlSelector = "div.post-title a:not([target])"

View File

@ -17,7 +17,7 @@ class YaoiFanClube : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override val popularMangaUrlSelector = "div.post-title a:not([target])" override val popularMangaUrlSelector = "div.post-title a:not([target])"

View File

@ -19,7 +19,7 @@ class YaoiToshokan : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
// Page has custom link to scan website. // Page has custom link to scan website.

View File

@ -15,7 +15,7 @@ class YuriVerso : Madara(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaSelector() = "div.page-item-detail.manga" override fun popularMangaSelector() = "div.page-item-detail.manga"

View File

@ -18,7 +18,7 @@ class LeitorNet : MangasProject("Leitor.net", "https://leitor.net", "pt-BR") {
override val id: Long = 2225174659569980836 override val id: Long = 2225174659569980836
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(2, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
/** /**

View File

@ -17,7 +17,7 @@ class MangaLivre : MangasProject("Mangá Livre", "https://mangalivre.net", "pt-B
override val id: Long = 4762777556012432014 override val id: Long = 4762777556012432014
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(2, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun popularMangaRequest(page: Int): Request { override fun popularMangaRequest(page: Int): Request {

View File

@ -9,7 +9,7 @@ import java.util.concurrent.TimeUnit
class Toonei : MangasProject("Toonei", "https://toonei.net", "pt-BR") { class Toonei : MangasProject("Toonei", "https://toonei.net", "pt-BR") {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(2, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun getReaderToken(document: Document): String? { override fun getReaderToken(document: Document): String? {

View File

@ -13,7 +13,7 @@ import java.util.concurrent.TimeUnit
class AmaScans : MMRCMS("Ama Scans", "https://amascan.com", "pt-BR") { class AmaScans : MMRCMS("Ama Scans", "https://amascan.com", "pt-BR") {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun imageRequest(page: Page): Request { override fun imageRequest(page: Page): Request {

View File

@ -9,6 +9,6 @@ class AnimaRegia : MMRCMS("AnimaRegia", "https://animaregia.net", "pt-BR") {
override val id: Long = 4378659695320121364 override val id: Long = 4378659695320121364
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
} }

View File

@ -11,7 +11,7 @@ import java.util.concurrent.TimeUnit
class GekkouScans : MMRCMS("Gekkou Scans", "https://leitor.gekkouscans.com.br", "pt-BR") { class GekkouScans : MMRCMS("Gekkou Scans", "https://leitor.gekkouscans.com.br", "pt-BR") {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun chapterListSelector() = "ul.domaintld > li.li" override fun chapterListSelector() = "ul.domaintld > li.li"

View File

@ -8,6 +8,6 @@ import java.util.concurrent.TimeUnit
class Remangas : MMRCMS("Remangas", "https://remangas.top", "pt-BR") { class Remangas : MMRCMS("Remangas", "https://remangas.top", "pt-BR") {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
} }

View File

@ -15,7 +15,7 @@ class GeassScanlator : WPMangaStream(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override val altName: String = "Nome alternativo: " override val altName: String = "Nome alternativo: "

View File

@ -17,7 +17,7 @@ class LemonJuiceScan : WPMangaStream(
) { ) {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
// [...document.querySelectorAll('ul.taxindex li a')] // [...document.querySelectorAll('ul.taxindex li a')]

View File

@ -23,7 +23,7 @@ class SilenceScan : WPMangaStream(
override val client: OkHttpClient = network.cloudflareClient.newBuilder() override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.connectTimeout(10, TimeUnit.SECONDS) .connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS)
.addNetworkInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addNetworkInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
private val json: Json by injectLazy() private val json: Json by injectLazy()

View File

@ -32,7 +32,7 @@ class FoolSlideGenerator : ThemeSourceGenerator {
SingleLang("LupiTeam", "https://lupiteam.net", "it"), SingleLang("LupiTeam", "https://lupiteam.net", "it"),
SingleLang("Zandy no Fansub", "https://zandynofansub.aishiteru.org", "en"), SingleLang("Zandy no Fansub", "https://zandynofansub.aishiteru.org", "en"),
SingleLang("Kirishima Fansub", "https://www.kirishimafansub.net", "es"), SingleLang("Kirishima Fansub", "https://www.kirishimafansub.net", "es"),
SingleLang("Baixar Hentai", "https://leitura.baixarhentai.net", "pt-BR", isNsfw = true, overrideVersionCode = 2), SingleLang("Baixar Hentai", "https://leitura.baixarhentai.net", "pt-BR", isNsfw = true, overrideVersionCode = 3),
MultiLang("HNI-Scantrad", "https://hni-scantrad.com", listOf("fr", "en"), className = "HNIScantradFactory", pkgName = "hniscantrad", overrideVersionCode = 1), MultiLang("HNI-Scantrad", "https://hni-scantrad.com", listOf("fr", "en"), className = "HNIScantradFactory", pkgName = "hniscantrad", overrideVersionCode = 1),
SingleLang("QuegnaReader", "http://pignaquegna.altervista.org", "it"), SingleLang("QuegnaReader", "http://pignaquegna.altervista.org", "it"),
SingleLang("The Phoenix Scans", "https://www.phoenixscans.com", "it", className = "PhoenixScans"), SingleLang("The Phoenix Scans", "https://www.phoenixscans.com", "it", className = "PhoenixScans"),

View File

@ -36,26 +36,26 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("ApollComics", "https://apollcomics.xyz", "es", overrideVersionCode = 1), SingleLang("ApollComics", "https://apollcomics.xyz", "es", overrideVersionCode = 1),
SingleLang("ArabMkr", "https://arabmkr.me", "ar"), SingleLang("ArabMkr", "https://arabmkr.me", "ar"),
SingleLang("ArazNovel", "https://www.araznovel.com", "tr", overrideVersionCode = 1), SingleLang("ArazNovel", "https://www.araznovel.com", "tr", overrideVersionCode = 1),
SingleLang("Argos Scan", "https://argosscan.com", "pt-BR", overrideVersionCode = 2), SingleLang("Argos Scan", "https://argosscan.com", "pt-BR", overrideVersionCode = 3),
SingleLang("Arthur Scan", "https://arthurscan.xyz", "pt-BR", overrideVersionCode = 1), SingleLang("Arthur Scan", "https://arthurscan.xyz", "pt-BR", overrideVersionCode = 2),
SingleLang("Asgard Team", "https://www.asgard1team.com", "ar", overrideVersionCode = 1), SingleLang("Asgard Team", "https://www.asgard1team.com", "ar", overrideVersionCode = 1),
SingleLang("Astral Library", "https://www.astrallibrary.net", "en", overrideVersionCode = 2), SingleLang("Astral Library", "https://www.astrallibrary.net", "en", overrideVersionCode = 2),
SingleLang("Atikrost", "https://atikrost.com", "tr", overrideVersionCode = 1), SingleLang("Atikrost", "https://atikrost.com", "tr", overrideVersionCode = 1),
SingleLang("AZManhwa", "https://azmanhwa.net", "en"), SingleLang("AZManhwa", "https://azmanhwa.net", "en"),
SingleLang("Azora", "https://azoramanga.com", "ar", overrideVersionCode = 2), SingleLang("Azora", "https://azoramanga.com", "ar", overrideVersionCode = 2),
SingleLang("BL Manhwa Club", "https://blmanhwa.club", "pt-BR", isNsfw = true, className = "BlManhwaClub", overrideVersionCode = 1), SingleLang("BL Manhwa Club", "https://blmanhwa.club", "pt-BR", isNsfw = true, className = "BlManhwaClub", overrideVersionCode = 2),
SingleLang("Block Manga", "https://blockmanga.com", "en"), SingleLang("Block Manga", "https://blockmanga.com", "en"),
SingleLang("Bakaman", "https://bakaman.net", "th", overrideVersionCode = 1), SingleLang("Bakaman", "https://bakaman.net", "th", overrideVersionCode = 1),
SingleLang("Banana Mecânica", "https://leitorbm.com", "pt-BR", isNsfw = true, pkgName = "bananamecanica", className = "BananaMecanica", overrideVersionCode = 1), SingleLang("Banana Mecânica", "https://leitorbm.com", "pt-BR", isNsfw = true, pkgName = "bananamecanica", className = "BananaMecanica", overrideVersionCode = 2),
SingleLang("BestManga", "https://bestmanga.club", "ru", overrideVersionCode = 1), SingleLang("BestManga", "https://bestmanga.club", "ru", overrideVersionCode = 1),
SingleLang("BestManhua", "https://bestmanhua.com", "en", overrideVersionCode = 2), SingleLang("BestManhua", "https://bestmanhua.com", "en", overrideVersionCode = 2),
SingleLang("BlogManga", "https://blogmanga.net", "en"), SingleLang("BlogManga", "https://blogmanga.net", "en"),
SingleLang("BoysLove", "https://boyslove.me", "en", overrideVersionCode = 2), SingleLang("BoysLove", "https://boyslove.me", "en", overrideVersionCode = 2),
SingleLang("CAT-translator", "https://cat-translator.com", "th", className = "CatTranslator", overrideVersionCode = 1), SingleLang("CAT-translator", "https://cat-translator.com", "th", className = "CatTranslator", overrideVersionCode = 1),
SingleLang("Café com Yaoi", "http://cafecomyaoi.com.br", "pt-BR", pkgName = "cafecomyaoi", className = "CafeComYaoi", isNsfw = true), SingleLang("Café com Yaoi", "http://cafecomyaoi.com.br", "pt-BR", pkgName = "cafecomyaoi", className = "CafeComYaoi", isNsfw = true, overrideVersionCode = 1),
SingleLang("CatOnHeadTranslations", "https://catonhead.com", "en", overrideVersionCode = 1), SingleLang("CatOnHeadTranslations", "https://catonhead.com", "en", overrideVersionCode = 1),
SingleLang("Cerise Scans", "https://cerisescans.com", "pt-BR", overrideVersionCode = 1), SingleLang("Cerise Scans", "https://cerisescans.com", "pt-BR", overrideVersionCode = 2),
SingleLang("Cervo Scanlator", "https://cervoscan.xyz", "pt-BR", overrideVersionCode = 2), SingleLang("Cervo Scanlator", "https://cervoscan.xyz", "pt-BR", overrideVersionCode = 3),
SingleLang("Chibi Manga", "https://www.cmreader.info", "en", overrideVersionCode = 1), SingleLang("Chibi Manga", "https://www.cmreader.info", "en", overrideVersionCode = 1),
SingleLang("Clover Manga", "https://clover-manga.com", "tr", overrideVersionCode = 2), SingleLang("Clover Manga", "https://clover-manga.com", "tr", overrideVersionCode = 2),
SingleLang("ComicKiba", "https://comickiba.com", "en", overrideVersionCode = 1), SingleLang("ComicKiba", "https://comickiba.com", "en", overrideVersionCode = 1),
@ -64,28 +64,28 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Comics Valley", "https://comicsvalley.com", "hi", isNsfw = true, overrideVersionCode = 1), SingleLang("Comics Valley", "https://comicsvalley.com", "hi", isNsfw = true, overrideVersionCode = 1),
SingleLang("ComicsWorld", "https://comicsworld.in", "hi"), SingleLang("ComicsWorld", "https://comicsworld.in", "hi"),
SingleLang("CopyPasteScan", "https://copypastescan.xyz", "es", overrideVersionCode = 1), SingleLang("CopyPasteScan", "https://copypastescan.xyz", "es", overrideVersionCode = 1),
SingleLang("DarkYue Realm", "https://darkyuerealm.site/web", "pt-BR", pkgName = "darkyurealm", overrideVersionCode = 3), SingleLang("DarkYue Realm", "https://darkyuerealm.site/web", "pt-BR", pkgName = "darkyurealm", overrideVersionCode = 4),
SingleLang("Decadence Scans", "https://reader.decadencescans.com", "en", overrideVersionCode = 1), SingleLang("Decadence Scans", "https://reader.decadencescans.com", "en", overrideVersionCode = 1),
SingleLang("DiamondFansub", "https://diamondfansub.com", "tr", overrideVersionCode = 1), SingleLang("DiamondFansub", "https://diamondfansub.com", "tr", overrideVersionCode = 1),
SingleLang("Disaster Scans", "https://disasterscans.com", "en", overrideVersionCode = 1), SingleLang("Disaster Scans", "https://disasterscans.com", "en", overrideVersionCode = 1),
SingleLang("Diskus Scan", "https://diskusscan.com", "pt-BR"), SingleLang("Diskus Scan", "https://diskusscan.com", "pt-BR", overrideVersionCode = 1),
SingleLang("DoujinHentai", "https://doujinhentai.net", "es", isNsfw = true, overrideVersionCode = 1), SingleLang("DoujinHentai", "https://doujinhentai.net", "es", isNsfw = true, overrideVersionCode = 1),
SingleLang("Dream Manga", "https://en.ruyamanga.com", "en", overrideVersionCode = 2), SingleLang("Dream Manga", "https://en.ruyamanga.com", "en", overrideVersionCode = 2),
SingleLang("Drope Scan", "https://dropescan.com", "pt-BR", overrideVersionCode = 2), SingleLang("Drope Scan", "https://dropescan.com", "pt-BR", overrideVersionCode = 3),
SingleLang("Dream Union Scan", "https://www.dreamunionscan.com", "pt-BR"), SingleLang("Dream Union Scan", "https://www.dreamunionscan.com", "pt-BR", overrideVersionCode = 1),
SingleLang("Esomanga", "http://esomanga.com", "tr"), SingleLang("Esomanga", "http://esomanga.com", "tr"),
SingleLang("Exo Scans", "https://exoscans.club", "en"), SingleLang("Exo Scans", "https://exoscans.club", "en"),
SingleLang("FastManhwa", "https://fastmanhwa.com", "en", isNsfw = true), SingleLang("FastManhwa", "https://fastmanhwa.com", "en", isNsfw = true),
SingleLang("FDM Scan", "https://fdmscan.com", "pt-BR", overrideVersionCode = 2), SingleLang("FDM Scan", "https://fdmscan.com", "pt-BR", overrideVersionCode = 3),
SingleLang("Free Manga", "https://freemanga.me", "en", isNsfw = true, overrideVersionCode = 2), SingleLang("Free Manga", "https://freemanga.me", "en", isNsfw = true, overrideVersionCode = 2),
SingleLang("FreeWebtoonCoins", "https://freewebtooncoins.com", "en", overrideVersionCode = 1), SingleLang("FreeWebtoonCoins", "https://freewebtooncoins.com", "en", overrideVersionCode = 1),
SingleLang("Fudido Scanlator", "https://fudidoscan.com", "pt-BR", isNsfw = true, overrideVersionCode = 1), SingleLang("Fudido Scanlator", "https://fudidoscan.com", "pt-BR", isNsfw = true, overrideVersionCode = 2),
SingleLang("Fukushuu no Yuusha", "https://fny-scantrad.com", "fr", overrideVersionCode = 2), SingleLang("Fukushuu no Yuusha", "https://fny-scantrad.com", "fr", overrideVersionCode = 2),
SingleLang("Furio Scans", "https://furioscans.com", "pt-BR", overrideVersionCode = 2), SingleLang("Furio Scans", "https://furioscans.com", "pt-BR", overrideVersionCode = 3),
SingleLang("Fênix Scanlator", "https://fenixscanlator.xyz", "pt-BR", pkgName = "fenixscanlator", className = "FenixScanlator", overrideVersionCode = 1), SingleLang("Fênix Scanlator", "https://fenixscanlator.xyz", "pt-BR", pkgName = "fenixscanlator", className = "FenixScanlator", overrideVersionCode = 2),
SingleLang("GalaxyDegenScans", "https://gdegenscans.xyz/", "en", overrideVersionCode = 1), SingleLang("GalaxyDegenScans", "https://gdegenscans.xyz/", "en", overrideVersionCode = 1),
SingleLang("Geass Hentai", "https://geasshentai.xyz", "pt-BR", isNsfw = true), SingleLang("Geass Hentai", "https://geasshentai.xyz", "pt-BR", isNsfw = true, overrideVersionCode = 1),
SingleLang("Glory Scans", "https://gloryscan.com", "pt-BR", isNsfw = true, overrideVersionCode = 1), SingleLang("Glory Scans", "https://gloryscan.com", "pt-BR", isNsfw = true, overrideVersionCode = 2),
SingleLang("Gogoscans", "https://www.gogoscans.com", "en"), SingleLang("Gogoscans", "https://www.gogoscans.com", "en"),
SingleLang("Graze Scans", "https://grazescans.com/", "en", overrideVersionCode = 1), SingleLang("Graze Scans", "https://grazescans.com/", "en", overrideVersionCode = 1),
SingleLang("GuncelManga", "https://guncelmanga.com", "tr", overrideVersionCode = 1), SingleLang("GuncelManga", "https://guncelmanga.com", "tr", overrideVersionCode = 1),
@ -106,7 +106,7 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Ichirin No Hana Yuri", "https://ichirinnohanayuri.com.br", "pt-BR", overrideVersionCode = 3), SingleLang("Ichirin No Hana Yuri", "https://ichirinnohanayuri.com.br", "pt-BR", overrideVersionCode = 3),
SingleLang("Immortal Updates", "https://immortalupdates.com", "en", overrideVersionCode = 1), SingleLang("Immortal Updates", "https://immortalupdates.com", "en", overrideVersionCode = 1),
SingleLang("Imperfect Comics", "https://imperfectcomic.com", "en"), SingleLang("Imperfect Comics", "https://imperfectcomic.com", "en"),
SingleLang("Império dos Otakus", "https://imperiodosotakus.tk", "pt-BR", className = "ImperioDosOtakus", overrideVersionCode = 1), SingleLang("Império dos Otakus", "https://imperiodosotakus.tk", "pt-BR", className = "ImperioDosOtakus", overrideVersionCode = 2),
SingleLang("InfraFandub", "https://infrafandub.xyz", "es"), SingleLang("InfraFandub", "https://infrafandub.xyz", "es"),
SingleLang("IsekaiScan.com", "https://isekaiscan.com", "en", className = "IsekaiScanCom", overrideVersionCode = 2), SingleLang("IsekaiScan.com", "https://isekaiscan.com", "en", className = "IsekaiScanCom", overrideVersionCode = 2),
SingleLang("IsekaiScanManga (unoriginal)", "https://isekaiscanmanga.com", "en", className = "IsekaiScanManga", overrideVersionCode = 1), SingleLang("IsekaiScanManga (unoriginal)", "https://isekaiscanmanga.com", "en", className = "IsekaiScanManga", overrideVersionCode = 1),
@ -123,8 +123,8 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Levelerscans", "https://levelerscans.xyz", "en", overrideVersionCode = 1), SingleLang("Levelerscans", "https://levelerscans.xyz", "en", overrideVersionCode = 1),
SingleLang("Leviatan Scans X", "https://xxx.leviatanscans.com", "en", isNsfw = true), SingleLang("Leviatan Scans X", "https://xxx.leviatanscans.com", "en", isNsfw = true),
SingleLang("Lily Manga", "https://lilymanga.com", "en"), SingleLang("Lily Manga", "https://lilymanga.com", "en"),
SingleLang("Lima Scans", "http://limascans.xyz/v2", "pt-BR", isNsfw = true, overrideVersionCode = 1), SingleLang("Lima Scans", "http://limascans.xyz/v2", "pt-BR", isNsfw = true, overrideVersionCode = 2),
SingleLang("Little Monster Scan", "https://littlemonsterscan.com.br", "pt-BR", overrideVersionCode = 2), SingleLang("Little Monster Scan", "https://littlemonsterscan.com.br", "pt-BR", overrideVersionCode = 3),
SingleLang("Lolicon", "https://lolicon.mobi", "en", isNsfw = true, overrideVersionCode = 1), SingleLang("Lolicon", "https://lolicon.mobi", "en", isNsfw = true, overrideVersionCode = 1),
SingleLang("LovableSubs", "https://lovablesubs.com", "tr", overrideVersionCode = 1), SingleLang("LovableSubs", "https://lovablesubs.com", "tr", overrideVersionCode = 1),
SingleLang("MG Komik", "https://mgkomik.com", "id", overrideVersionCode = 2), SingleLang("MG Komik", "https://mgkomik.com", "id", overrideVersionCode = 2),
@ -202,7 +202,7 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("MangaToRead", "https://mangatoread.com", "en"), SingleLang("MangaToRead", "https://mangatoread.com", "en"),
SingleLang("MangaTK", "https://mangatk.com", "en"), SingleLang("MangaTK", "https://mangatk.com", "en"),
SingleLang("MangaTX", "https://mangatx.com", "en", overrideVersionCode = 1), SingleLang("MangaTX", "https://mangatx.com", "en", overrideVersionCode = 1),
SingleLang("MangaTeca", "https://www.mangateca.com", "pt-BR", overrideVersionCode = 2), SingleLang("MangaTeca", "https://www.mangateca.com", "pt-BR", overrideVersionCode = 3),
SingleLang("MangaTuli", "https://mangatuli.com", "en", isNsfw = true, overrideVersionCode = 2), SingleLang("MangaTuli", "https://mangatuli.com", "en", isNsfw = true, overrideVersionCode = 2),
SingleLang("MangaUS", "https://mangaus.xyz", "en", overrideVersionCode = 2), SingleLang("MangaUS", "https://mangaus.xyz", "en", overrideVersionCode = 2),
SingleLang("MangaVB", "https://mangavb.com", "en", isNsfw = true), SingleLang("MangaVB", "https://mangavb.com", "en", isNsfw = true),
@ -254,21 +254,21 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("ManyToon.me", "https://manytoon.me", "en", isNsfw = true, className = "ManyToonMe", overrideVersionCode = 2), SingleLang("ManyToon.me", "https://manytoon.me", "en", isNsfw = true, className = "ManyToonMe", overrideVersionCode = 2),
SingleLang("ManyToonClub", "https://manytoon.club", "ko", isNsfw = true, overrideVersionCode = 1), SingleLang("ManyToonClub", "https://manytoon.club", "ko", isNsfw = true, overrideVersionCode = 1),
SingleLang("ManyComic", "https://manycomic.com", "en", isNsfw = true, overrideVersionCode = 1), SingleLang("ManyComic", "https://manycomic.com", "en", isNsfw = true, overrideVersionCode = 1),
SingleLang("Mark Scans", "https://markscans.online", "pt-BR", overrideVersionCode = 2), SingleLang("Mark Scans", "https://markscans.online", "pt-BR", overrideVersionCode = 3),
SingleLang("MHentais", "https://mhentais.com", "pt-BR", isNsfw = true), SingleLang("MHentais", "https://mhentais.com", "pt-BR", isNsfw = true, overrideVersionCode = 1),
SingleLang("Mhmanga", "https://mhmanga.com", "en"), SingleLang("Mhmanga", "https://mhmanga.com", "en"),
SingleLang("NeoXXX Scans", "https://xxx.neoxscans.com", "pt-BR", isNsfw = true, overrideVersionCode = 2), SingleLang("NeoXXX Scans", "https://xxx.neoxscans.com", "pt-BR", isNsfw = true, overrideVersionCode = 2),
SingleLang("Midnight Mess Scans", "https://midnightmess.org", "en", isNsfw = true, overrideVersionCode = 5), SingleLang("Midnight Mess Scans", "https://midnightmess.org", "en", isNsfw = true, overrideVersionCode = 5),
SingleLang("Milftoon", "https://milftoon.xxx", "en", isNsfw = true, overrideVersionCode = 2), SingleLang("Milftoon", "https://milftoon.xxx", "en", isNsfw = true, overrideVersionCode = 2),
SingleLang("Mixed Manga", "https://mixedmanga.com", "en", overrideVersionCode = 1), SingleLang("Mixed Manga", "https://mixedmanga.com", "en", overrideVersionCode = 1),
SingleLang("Mode Scanlator", "https://modescanlator.com", "pt-BR", overrideVersionCode = 1), SingleLang("Mode Scanlator", "https://modescanlator.com", "pt-BR", overrideVersionCode = 2),
SingleLang("Moon Witch In Love", "https://moonwitchinlove.com", "pt-BR"), SingleLang("Moon Witch In Love", "https://moonwitchinlove.com", "pt-BR", overrideVersionCode = 1),
SingleLang("Mortals Groove", "https://mortalsgroove.com", "en"), SingleLang("Mortals Groove", "https://mortalsgroove.com", "en"),
SingleLang("Muctau", "https://muctau.com", "en"), SingleLang("Muctau", "https://muctau.com", "en"),
SingleLang("Mystical Merries", "https://mysticalmerries.com", "en", overrideVersionCode = 1), SingleLang("Mystical Merries", "https://mysticalmerries.com", "en", overrideVersionCode = 1),
SingleLang("NeatManga", "https://neatmanga.com", "en", overrideVersionCode = 1), SingleLang("NeatManga", "https://neatmanga.com", "en", overrideVersionCode = 1),
SingleLang("NekoScan", "https://nekoscan.com", "en", overrideVersionCode = 1), SingleLang("NekoScan", "https://nekoscan.com", "en", overrideVersionCode = 1),
SingleLang("NekoBreaker Scan", "https://nekobreakerscan.com", "pt-BR"), SingleLang("NekoBreaker Scan", "https://nekobreakerscan.com", "pt-BR", overrideVersionCode = 1),
SingleLang("Neox Scanlator", "https://neoxscans.com", "pt-BR", overrideVersionCode = 7), SingleLang("Neox Scanlator", "https://neoxscans.com", "pt-BR", overrideVersionCode = 7),
SingleLang("Night Comic", "https://www.nightcomic.com", "en", overrideVersionCode = 1), SingleLang("Night Comic", "https://www.nightcomic.com", "en", overrideVersionCode = 1),
SingleLang("Niji Translations", "https://niji-translations.com", "ar"), SingleLang("Niji Translations", "https://niji-translations.com", "ar"),
@ -276,9 +276,9 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Nitro Scans", "https://nitroscans.com", "en"), SingleLang("Nitro Scans", "https://nitroscans.com", "en"),
SingleLang("NovelMic", "https://novelmic.com", "en", overrideVersionCode = 1), SingleLang("NovelMic", "https://novelmic.com", "en", overrideVersionCode = 1),
SingleLang("Oh No Manga", "https://ohnomanga.com", "en", isNsfw = true), SingleLang("Oh No Manga", "https://ohnomanga.com", "en", isNsfw = true),
SingleLang("Off Scan", "https://offscan.top", "pt-BR", overrideVersionCode = 2), SingleLang("Off Scan", "https://offscan.top", "pt-BR", overrideVersionCode = 3),
SingleLang("OnManga", "https://onmanga.com", "en", overrideVersionCode = 1), SingleLang("OnManga", "https://onmanga.com", "en", overrideVersionCode = 1),
SingleLang("Origami Orpheans", "https://origami-orpheans.com.br", "pt-BR", overrideVersionCode = 2), SingleLang("Origami Orpheans", "https://origami-orpheans.com.br", "pt-BR", overrideVersionCode = 3),
SingleLang("Paean Scans", "https://paeanscans.com", "en", overrideVersionCode = 1), SingleLang("Paean Scans", "https://paeanscans.com", "en", overrideVersionCode = 1),
SingleLang("Painful Nightz Scan", "https://painfulnightzscan.com", "en"), SingleLang("Painful Nightz Scan", "https://painfulnightzscan.com", "en"),
SingleLang("Platinum Crown", "https://platinumscans.com", "en", overrideVersionCode = 1), SingleLang("Platinum Crown", "https://platinumscans.com", "en", overrideVersionCode = 1),
@ -286,17 +286,17 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("PoManga", "https://pomanga.com", "en"), SingleLang("PoManga", "https://pomanga.com", "en"),
SingleLang("PornComix", "https://www.porncomixonline.net", "en", isNsfw = true, overrideVersionCode = 1), SingleLang("PornComix", "https://www.porncomixonline.net", "en", isNsfw = true, overrideVersionCode = 1),
SingleLang("Pornwha", "https://pornwha.com", "en", isNsfw = true, overrideVersionCode = 1), SingleLang("Pornwha", "https://pornwha.com", "en", isNsfw = true, overrideVersionCode = 1),
SingleLang("Prisma Scans", "https://prismascans.net", "pt-BR"), SingleLang("Prisma Scans", "https://prismascans.net", "pt-BR", overrideVersionCode = 1),
SingleLang("Projeto Scanlator", "https://projetoscanlator.com", "pt-BR", overrideVersionCode = 2), SingleLang("Projeto Scanlator", "https://projetoscanlator.com", "pt-BR", overrideVersionCode = 3),
SingleLang("QueensManga ملكات المانجا", "https://queensmanga.com", "ar", className = "QueensManga", overrideVersionCode = 1), SingleLang("QueensManga ملكات المانجا", "https://queensmanga.com", "ar", className = "QueensManga", overrideVersionCode = 1),
SingleLang("Random Scan", "https://randomscan.online", "pt-BR", overrideVersionCode = 3), SingleLang("Random Scan", "https://randomscan.online", "pt-BR", overrideVersionCode = 4),
SingleLang("Random Translations", "https://randomtranslations.com", "en", overrideVersionCode = 1), SingleLang("Random Translations", "https://randomtranslations.com", "en", overrideVersionCode = 1),
SingleLang("Raw Mangas", "https://rawmangas.net", "ja", isNsfw = true, overrideVersionCode = 1), SingleLang("Raw Mangas", "https://rawmangas.net", "ja", isNsfw = true, overrideVersionCode = 1),
SingleLang("RawDEX", "https://rawdex.net", "ko", isNsfw = true, overrideVersionCode = 1), SingleLang("RawDEX", "https://rawdex.net", "ko", isNsfw = true, overrideVersionCode = 1),
SingleLang("ReadAdult", "https://readadult.net", "en", isNsfw = true), SingleLang("ReadAdult", "https://readadult.net", "en", isNsfw = true),
SingleLang("ReadManhua", "https://readmanhua.net", "en", overrideVersionCode = 2), SingleLang("ReadManhua", "https://readmanhua.net", "en", overrideVersionCode = 2),
SingleLang("Reaper Scans", "https://reaperscans.com", "en"), SingleLang("Reaper Scans", "https://reaperscans.com", "en"),
SingleLang("Red Ribbon Scanlator", "https://redribbon.site", "pt-BR"), SingleLang("Red Ribbon Scanlator", "https://redribbon.site", "pt-BR", overrideVersionCode = 1),
SingleLang("Renascence Scans (Renascans)", "https://new.renascans.com", "en", className = "RenaScans", overrideVersionCode = 1), SingleLang("Renascence Scans (Renascans)", "https://new.renascans.com", "en", className = "RenaScans", overrideVersionCode = 1),
SingleLang("Reset Scans", "https://reset-scans.com", "en", overrideVersionCode = 3), SingleLang("Reset Scans", "https://reset-scans.com", "en", overrideVersionCode = 3),
SingleLang("Rüya Manga", "https://www.ruyamanga.com", "tr", className = "RuyaManga", overrideVersionCode = 1), SingleLang("Rüya Manga", "https://www.ruyamanga.com", "tr", className = "RuyaManga", overrideVersionCode = 1),
@ -312,20 +312,20 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Shooting Star Scans", "https://shootingstarscans.xyz", "en", overrideVersionCode = 1), SingleLang("Shooting Star Scans", "https://shootingstarscans.xyz", "en", overrideVersionCode = 1),
SingleLang("ShoujoHearts", "https://shoujohearts.com", "en", overrideVersionCode = 2), SingleLang("ShoujoHearts", "https://shoujohearts.com", "en", overrideVersionCode = 2),
SingleLang("SiXiang Scans", "http://www.sixiangscans.com", "en", overrideVersionCode = 1), SingleLang("SiXiang Scans", "http://www.sixiangscans.com", "en", overrideVersionCode = 1),
SingleLang("Sinensis", "https://sinensisscan.com", "pt-BR"), SingleLang("Sinensis", "https://sinensisscan.com", "pt-BR", overrideVersionCode = 1),
SingleLang("Siyahmelek", "https://siyahmelek.net", "tr", isNsfw = true, overrideVersionCode = 2), SingleLang("Siyahmelek", "https://siyahmelek.net", "tr", isNsfw = true, overrideVersionCode = 2),
SingleLang("Skymanga", "https://skymanga.co", "en", overrideVersionCode = 1), SingleLang("Skymanga", "https://skymanga.co", "en", overrideVersionCode = 1),
SingleLang("SkyRaws", "https://skyraws.com", "en"), SingleLang("SkyRaws", "https://skyraws.com", "en"),
SingleLang("Sleeping Knight Scans", "https://skscans.com", "en", overrideVersionCode = 2), SingleLang("Sleeping Knight Scans", "https://skscans.com", "en", overrideVersionCode = 2),
SingleLang("Sleepy Translations", "https://sleepytranslations.com/", "en", overrideVersionCode = 1), SingleLang("Sleepy Translations", "https://sleepytranslations.com/", "en", overrideVersionCode = 1),
SingleLang("Solo Leveling", "https://readsololeveling.online", "en"), SingleLang("Solo Leveling", "https://readsololeveling.online", "en"),
SingleLang("StageComics", "https://stagecomics.com", "pt-BR", overrideVersionCode = 2), SingleLang("StageComics", "https://stagecomics.com", "pt-BR", overrideVersionCode = 3),
SingleLang("Sugar Babies", "https://sugarbscan.com", "en", overrideVersionCode = 1), SingleLang("Sugar Babies", "https://sugarbscan.com", "en", overrideVersionCode = 1),
SingleLang("Sweet Time Scan", "https://sweetscan.net", "pt-BR", overrideVersionCode = 1), SingleLang("Sweet Time Scan", "https://sweetscan.net", "pt-BR", overrideVersionCode = 2),
SingleLang("TappyToon.Net", "https://tappytoon.net", "en", className = "Tappytoonnet"), SingleLang("TappyToon.Net", "https://tappytoon.net", "en", className = "Tappytoonnet"),
SingleLang("TeenManhua", "https://teenmanhua.com", "en"), SingleLang("TeenManhua", "https://teenmanhua.com", "en"),
SingleLang("TheFluffyHangoutGroup", "https://www.fluffyhangout.club", "en", overrideVersionCode = 2), SingleLang("TheFluffyHangoutGroup", "https://www.fluffyhangout.club", "en", overrideVersionCode = 2),
SingleLang("Three Queens Scanlator", "https://tqscan.com.br", "pt-BR", overrideVersionCode = 2), SingleLang("Three Queens Scanlator", "https://tqscan.com.br", "pt-BR", overrideVersionCode = 3),
SingleLang("Time Naight", "https://timenaight.com", "tr"), SingleLang("Time Naight", "https://timenaight.com", "tr"),
SingleLang("Todaymic", "https://todaymic.com", "en"), SingleLang("Todaymic", "https://todaymic.com", "en"),
SingleLang("ToonGod", "https://www.toongod.com", "en", isNsfw = true, overrideVersionCode = 2), SingleLang("ToonGod", "https://www.toongod.com", "en", isNsfw = true, overrideVersionCode = 2),
@ -336,36 +336,36 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("TritiniaScans", "https://tritinia.com", "en", overrideVersionCode = 1), SingleLang("TritiniaScans", "https://tritinia.com", "en", overrideVersionCode = 1),
SingleLang("TruyenTranhAudio.com", "https://truyentranhaudio.com", "vi", className = "TruyenTranhAudioCom"), SingleLang("TruyenTranhAudio.com", "https://truyentranhaudio.com", "vi", className = "TruyenTranhAudioCom"),
SingleLang("TruyenTranhAudio.online", "https://truyentranhaudio.online", "vi", className = "TruyenTranhAudioOnline"), SingleLang("TruyenTranhAudio.online", "https://truyentranhaudio.online", "vi", className = "TruyenTranhAudioOnline"),
SingleLang("Tsundoku Traduções", "https://tsundokutraducoes.com.br", "pt-BR", pkgName = "tsundokutraducoes", className = "TsundokuTraducoes", overrideVersionCode = 2), SingleLang("Tsundoku Traduções", "https://tsundokutraducoes.com.br", "pt-BR", pkgName = "tsundokutraducoes", className = "TsundokuTraducoes", overrideVersionCode = 3),
SingleLang("TuManga.net", "https://tumanga.net", "es", className = "TuMangaNet"), SingleLang("TuManga.net", "https://tumanga.net", "es", className = "TuMangaNet"),
SingleLang("Twilight Scans", "https://twilightscans.com", "en", overrideVersionCode = 1), SingleLang("Twilight Scans", "https://twilightscans.com", "en", overrideVersionCode = 1),
SingleLang("Türkçe Manga", "https://turkcemanga.com", "tr", className = "TurkceManga", overrideVersionCode = 1), SingleLang("Türkçe Manga", "https://turkcemanga.com", "tr", className = "TurkceManga", overrideVersionCode = 1),
SingleLang("Unemployed Scans", "https://unemployedscans.com", "en", overrideVersionCode = 1), SingleLang("Unemployed Scans", "https://unemployedscans.com", "en", overrideVersionCode = 1),
SingleLang("Uyuyan Balik", "https://uyuyanbalik.com/", "tr", overrideVersionCode = 1), SingleLang("Uyuyan Balik", "https://uyuyanbalik.com/", "tr", overrideVersionCode = 1),
SingleLang("Vanguard Bun", "https://vanguardbun.com/", "en", overrideVersionCode = 1), SingleLang("Vanguard Bun", "https://vanguardbun.com/", "en", overrideVersionCode = 1),
SingleLang("Vapo Scan", "https://vaposcan.net", "pt-BR"), SingleLang("Vapo Scan", "https://vaposcan.net", "pt-BR", overrideVersionCode = 1),
SingleLang("Visbellum", "https://visbellum.com", "pt-BR", overrideVersionCode = 1), SingleLang("Visbellum", "https://visbellum.com", "pt-BR", overrideVersionCode = 2),
SingleLang("Volkan Scans", "https://volkanscans.com", "en", overrideVersionCode = 1), SingleLang("Volkan Scans", "https://volkanscans.com", "en", overrideVersionCode = 1),
SingleLang("Wakamics", "https://wakamics.net", "en"), SingleLang("Wakamics", "https://wakamics.net", "en"),
SingleLang("Wakascan", "https://wakascan.com", "fr", overrideVersionCode = 1), SingleLang("Wakascan", "https://wakascan.com", "fr", overrideVersionCode = 1),
SingleLang("War Queen Scan", "https://wqscan.com.br", "pt-BR", overrideVersionCode = 3), SingleLang("War Queen Scan", "https://wqscan.com.br", "pt-BR", overrideVersionCode = 4),
SingleLang("WebNovel", "https://webnovel.live", "en", className = "WebNovelLive", overrideVersionCode = 3), SingleLang("WebNovel", "https://webnovel.live", "en", className = "WebNovelLive", overrideVersionCode = 3),
SingleLang("WebToonily", "https://webtoonily.com", "en", isNsfw = true, overrideVersionCode = 1), SingleLang("WebToonily", "https://webtoonily.com", "en", isNsfw = true, overrideVersionCode = 1),
SingleLang("Webtoon Hatti", "https://webtoonhatti.com/", "tr"), SingleLang("Webtoon Hatti", "https://webtoonhatti.com/", "tr"),
SingleLang("WebtoonScan", "https://webtoonscan.com", "en", isNsfw = true), SingleLang("WebtoonScan", "https://webtoonscan.com", "en", isNsfw = true),
SingleLang("WebtoonUK", "https://webtoon.uk", "en", overrideVersionCode = 2), SingleLang("WebtoonUK", "https://webtoon.uk", "en", overrideVersionCode = 2),
SingleLang("WebtoonXYZ", "https://www.webtoon.xyz", "en", isNsfw = true, overrideVersionCode = 3), SingleLang("WebtoonXYZ", "https://www.webtoon.xyz", "en", isNsfw = true, overrideVersionCode = 3),
SingleLang("Winter Scan", "https://winterscan.com.br", "pt-BR", overrideVersionCode = 2), SingleLang("Winter Scan", "https://winterscan.com.br", "pt-BR", overrideVersionCode = 3),
SingleLang("Wonderland", "https://landwebtoons.site", "pt-BR", overrideVersionCode = 2), SingleLang("Wonderland", "https://landwebtoons.site", "pt-BR", overrideVersionCode = 3),
SingleLang("WoopRead", "https://woopread.com", "en", overrideVersionCode = 1), SingleLang("WoopRead", "https://woopread.com", "en", overrideVersionCode = 1),
SingleLang("WuxiaWorld", "https://wuxiaworld.site", "en", overrideVersionCode = 1), SingleLang("WuxiaWorld", "https://wuxiaworld.site", "en", overrideVersionCode = 1),
SingleLang("XManga", "https://xmanga.io", "en", isNsfw = true), SingleLang("XManga", "https://xmanga.io", "en", isNsfw = true),
SingleLang("XManhwa", "https://xmanhwa.com", "en", isNsfw = true), SingleLang("XManhwa", "https://xmanhwa.com", "en", isNsfw = true),
SingleLang("XuN Scans", "https://xunscans.xyz", "en", overrideVersionCode = 2), SingleLang("XuN Scans", "https://xunscans.xyz", "en", overrideVersionCode = 2),
SingleLang("Yaoi Fan Clube", "https://yaoifanclube.com.br", "pt-BR", isNsfw = true, overrideVersionCode = 1), SingleLang("Yaoi Fan Clube", "https://yaoifanclube.com.br", "pt-BR", isNsfw = true, overrideVersionCode = 2),
SingleLang("Yaoi.mobi", "https://yaoi.mobi", "en", isNsfw = true, className = "YaoiManga", pkgName = "yaoimanga", overrideVersionCode = 4), SingleLang("Yaoi.mobi", "https://yaoi.mobi", "en", isNsfw = true, className = "YaoiManga", pkgName = "yaoimanga", overrideVersionCode = 4),
SingleLang("Yaoi Toshokan", "https://yaoitoshokan.net", "pt-BR", isNsfw = true, overrideVersionCode = 2), SingleLang("Yaoi Toshokan", "https://yaoitoshokan.net", "pt-BR", isNsfw = true, overrideVersionCode = 3),
SingleLang("Yuri Verso", "https://yuri.live", "pt-BR", overrideVersionCode = 2), SingleLang("Yuri Verso", "https://yuri.live", "pt-BR", overrideVersionCode = 3),
SingleLang("Zinmanga", "https://zinmanga.com", "en"), SingleLang("Zinmanga", "https://zinmanga.com", "en"),
SingleLang("Zinmanhwa", "https://zinmanhwa.com", "en"), SingleLang("Zinmanhwa", "https://zinmanhwa.com", "en"),
SingleLang("ZuttoManga", "https://zuttomanga.com", "en"), SingleLang("ZuttoManga", "https://zuttomanga.com", "en"),

View File

@ -9,7 +9,7 @@ class MangasProjectGenerator : ThemeSourceGenerator {
override val themeClass = "MangasProject" override val themeClass = "MangasProject"
override val baseVersionCode: Int = 6 override val baseVersionCode: Int = 7
override val sources = listOf( override val sources = listOf(
SingleLang("Leitor.net", "https://leitor.net", "pt-BR", className = "LeitorNet", isNsfw = true), SingleLang("Leitor.net", "https://leitor.net", "pt-BR", className = "LeitorNet", isNsfw = true),

View File

@ -57,15 +57,15 @@ class MMRCMSSources {
SourceData.Single("Komik Manga", "https://adm.komikmanga.com", "id"), SourceData.Single("Komik Manga", "https://adm.komikmanga.com", "id"),
SourceData.Single("Mangazuki Raws", "https://raws.mangazuki.co", "ko"), SourceData.Single("Mangazuki Raws", "https://raws.mangazuki.co", "ko"),
SourceData.Single("Mangazuki", "https://mangazuki.co", "en"), SourceData.Single("Mangazuki", "https://mangazuki.co", "en"),
SourceData.Single("Remangas", "https://remangas.top", "pt-BR", overrideVersionCode = 1), SourceData.Single("Remangas", "https://remangas.top", "pt-BR", overrideVersionCode = 2),
SourceData.Single("AnimaRegia", "https://animaregia.net", "pt-BR", overrideVersionCode = 1), SourceData.Single("AnimaRegia", "https://animaregia.net", "pt-BR", overrideVersionCode = 2),
SourceData.Single("MangaVadisi", "http://manga-v2.mangavadisi.org", "tr"), SourceData.Single("MangaVadisi", "http://manga-v2.mangavadisi.org", "tr"),
SourceData.Single("MangaID", "https://mangaid.click", "id"), SourceData.Single("MangaID", "https://mangaid.click", "id"),
SourceData.Single("Jpmangas", "https://jpmangas.co", "fr"), SourceData.Single("Jpmangas", "https://jpmangas.co", "fr"),
SourceData.Single("Op-VF", "https://www.op-vf.com", "fr", className = "OpVF"), SourceData.Single("Op-VF", "https://www.op-vf.com", "fr", className = "OpVF"),
SourceData.Single("FR Scan", "https://frscan.cc", "fr"), SourceData.Single("FR Scan", "https://frscan.cc", "fr"),
SourceData.Single("Gekkou Scans", "https://leitor.gekkouscans.com.br", "pt-BR", isNsfw = true, pkgName = "gekkouscan", overrideVersionCode = 1), SourceData.Single("Gekkou Scans", "https://leitor.gekkouscans.com.br", "pt-BR", isNsfw = true, pkgName = "gekkouscan", overrideVersionCode = 2),
SourceData.Single("Ama Scans", "https://amascan.com", "pt-BR", isNsfw = true), SourceData.Single("Ama Scans", "https://amascan.com", "pt-BR", isNsfw = true, overrideVersionCode = 1),
// NOTE: THIS SOURCE CONTAINS A CUSTOM LANGUAGE SYSTEM (which will be ignored)! // NOTE: THIS SOURCE CONTAINS A CUSTOM LANGUAGE SYSTEM (which will be ignored)!
SourceData.Single("HentaiShark", "https://www.hentaishark.com", "all", isNsfw = true), SourceData.Single("HentaiShark", "https://www.hentaishark.com", "all", isNsfw = true),
//MultiLang("HentaiShark", "https://www.hentaishark.com", listOf("en", "ja", "zh", "de", "nl", "ko", "cz", "eo", "mn", "ar", "sk", "la", "ua", "ceb", "tl", "fi", "bg", "tr"), isNsfw = true, className = "HentaiSharkFactory"), //MultiLang("HentaiShark", "https://www.hentaishark.com", listOf("en", "ja", "zh", "de", "nl", "ko", "cz", "eo", "mn", "ar", "sk", "la", "ua", "ceb", "tl", "fi", "bg", "tr"), isNsfw = true, className = "HentaiSharkFactory"),

View File

@ -36,7 +36,7 @@ class WPMangaStreamGenerator : ThemeSourceGenerator {
SingleLang("Manga Raw.org", "https://mangaraw.org", "ja", className = "MangaRawOrg", overrideVersionCode = 1), SingleLang("Manga Raw.org", "https://mangaraw.org", "ja", className = "MangaRawOrg", overrideVersionCode = 1),
SingleLang("Manga Pro Z", "https://mangaproz.com", "ar"), SingleLang("Manga Pro Z", "https://mangaproz.com", "ar"),
SingleLang("Mihentai", "https://mihentai.com", "en", isNsfw = true), SingleLang("Mihentai", "https://mihentai.com", "en", isNsfw = true),
SingleLang("Silence Scan", "https://silencescan.net", "pt-BR", overrideVersionCode = 2), SingleLang("Silence Scan", "https://silencescan.net", "pt-BR", overrideVersionCode = 3),
SingleLang("Kuma Scans (Kuma Translation)", "https://kumascans.com", "en", className = "KumaScans", overrideVersionCode = 1), SingleLang("Kuma Scans (Kuma Translation)", "https://kumascans.com", "en", className = "KumaScans", overrideVersionCode = 1),
SingleLang("Tempest Manga", "https://manga.tempestfansub.com", "tr"), SingleLang("Tempest Manga", "https://manga.tempestfansub.com", "tr"),
SingleLang("xCaliBR Scans", "https://xcalibrscans.com", "en", overrideVersionCode = 2), SingleLang("xCaliBR Scans", "https://xcalibrscans.com", "en", overrideVersionCode = 2),
@ -44,9 +44,9 @@ class WPMangaStreamGenerator : ThemeSourceGenerator {
SingleLang("World Romance Translation", "https://wrt.my.id", "id", overrideVersionCode = 3), SingleLang("World Romance Translation", "https://wrt.my.id", "id", overrideVersionCode = 3),
SingleLang("The Apollo Team", "https://theapollo.team", "en"), SingleLang("The Apollo Team", "https://theapollo.team", "en"),
SingleLang("Sekte Doujin", "https://sektedoujin.xyz", "id", isNsfw = true, overrideVersionCode = 2), SingleLang("Sekte Doujin", "https://sektedoujin.xyz", "id", isNsfw = true, overrideVersionCode = 2),
SingleLang("Lemon Juice Scan", "https://lemonjuicescan.com", "pt-BR", isNsfw = true), SingleLang("Lemon Juice Scan", "https://lemonjuicescan.com", "pt-BR", isNsfw = true, overrideVersionCode = 1),
SingleLang("Phoenix Fansub", "https://phoenixfansub.com", "es"), SingleLang("Phoenix Fansub", "https://phoenixfansub.com", "es"),
SingleLang("Geass Scanlator", "https://geassscan.xyz", "pt-BR") SingleLang("Geass Scanlator", "https://geassscan.xyz", "pt-BR", overrideVersionCode = 1)
) )
companion object { companion object {

View File

@ -5,8 +5,12 @@ ext {
extName = 'NOISE Manga' extName = 'NOISE Manga'
pkgNameSuffix = 'all.noisemanga' pkgNameSuffix = 'all.noisemanga'
extClass = '.NoiseMangaFactory' extClass = '.NoiseMangaFactory'
extVersionCode = 3 extVersionCode = 4
libVersion = '1.2' libVersion = '1.2'
} }
dependencies {
implementation project(':lib-ratelimit')
}
apply from: "$rootDir/common.gradle" apply from: "$rootDir/common.gradle"

View File

@ -1,5 +1,6 @@
package eu.kanade.tachiyomi.extension.all.noisemanga package eu.kanade.tachiyomi.extension.all.noisemanga
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.MangasPage import eu.kanade.tachiyomi.source.model.MangasPage
@ -8,11 +9,13 @@ import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import okhttp3.Headers import okhttp3.Headers
import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response import okhttp3.Response
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import rx.Observable import rx.Observable
import java.util.concurrent.TimeUnit
abstract class NoiseManga(override val lang: String) : ParsedHttpSource() { abstract class NoiseManga(override val lang: String) : ParsedHttpSource() {
@ -22,6 +25,10 @@ abstract class NoiseManga(override val lang: String) : ParsedHttpSource() {
override val supportsLatest = false override val supportsLatest = false
override val client: OkHttpClient = network.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build()
override fun headersBuilder(): Headers.Builder = Headers.Builder() override fun headersBuilder(): Headers.Builder = Headers.Builder()
.add("User-Agent", USER_AGENT) .add("User-Agent", USER_AGENT)
.add("Origin", baseUrl) .add("Origin", baseUrl)

View File

@ -5,7 +5,7 @@ ext {
extName = 'BR Mangás' extName = 'BR Mangás'
pkgNameSuffix = 'pt.brmangas' pkgNameSuffix = 'pt.brmangas'
extClass = '.BrMangas' extClass = '.BrMangas'
extVersionCode = 1 extVersionCode = 2
libVersion = '1.2' libVersion = '1.2'
containsNsfw = true containsNsfw = true
} }

View File

@ -29,7 +29,7 @@ class BrMangas : ParsedHttpSource() {
override val supportsLatest = true override val supportsLatest = true
override val client: OkHttpClient = network.cloudflareClient.newBuilder() override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun headersBuilder(): Headers.Builder = Headers.Builder() override fun headersBuilder(): Headers.Builder = Headers.Builder()

View File

@ -6,7 +6,7 @@ ext {
extName = 'Bruttal' extName = 'Bruttal'
pkgNameSuffix = 'pt.bruttal' pkgNameSuffix = 'pt.bruttal'
extClass = '.Bruttal' extClass = '.Bruttal'
extVersionCode = 3 extVersionCode = 4
libVersion = '1.2' libVersion = '1.2'
} }

View File

@ -30,7 +30,7 @@ class Bruttal : HttpSource() {
override val supportsLatest = false override val supportsLatest = false
override val client: OkHttpClient = network.client.newBuilder() override val client: OkHttpClient = network.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun headersBuilder(): Headers.Builder = Headers.Builder() override fun headersBuilder(): Headers.Builder = Headers.Builder()

View File

@ -6,7 +6,7 @@ ext {
extName = 'HipercooL' extName = 'HipercooL'
pkgNameSuffix = 'pt.hipercool' pkgNameSuffix = 'pt.hipercool'
extClass = '.Hipercool' extClass = '.Hipercool'
extVersionCode = 7 extVersionCode = 8
libVersion = '1.2' libVersion = '1.2'
containsNsfw = true containsNsfw = true
} }

View File

@ -1,7 +1,7 @@
package eu.kanade.tachiyomi.extension.pt.hipercool package eu.kanade.tachiyomi.extension.pt.hipercool
import eu.kanade.tachiyomi.annotations.Nsfw import eu.kanade.tachiyomi.annotations.Nsfw
import eu.kanade.tachiyomi.lib.ratelimit.SpecificHostRateLimitInterceptor import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.network.asObservableSuccess
@ -17,7 +17,6 @@ import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.put import kotlinx.serialization.json.put
import okhttp3.Headers import okhttp3.Headers
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
@ -29,6 +28,7 @@ import uy.kohesive.injekt.injectLazy
import java.text.ParseException import java.text.ParseException
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Locale import java.util.Locale
import java.util.concurrent.TimeUnit
@Nsfw @Nsfw
class Hipercool : HttpSource() { class Hipercool : HttpSource() {
@ -45,8 +45,7 @@ class Hipercool : HttpSource() {
override val supportsLatest = true override val supportsLatest = true
override val client: OkHttpClient = network.cloudflareClient.newBuilder() override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.addInterceptor(SpecificHostRateLimitInterceptor(baseUrl.toHttpUrl(), 1)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.addInterceptor(SpecificHostRateLimitInterceptor(STATIC_URL.toHttpUrl(), 2))
.build() .build()
override fun headersBuilder(): Headers.Builder = Headers.Builder() override fun headersBuilder(): Headers.Builder = Headers.Builder()

View File

@ -6,7 +6,7 @@ ext {
extName = 'HQ Now!' extName = 'HQ Now!'
pkgNameSuffix = 'pt.hqnow' pkgNameSuffix = 'pt.hqnow'
extClass = '.HQNow' extClass = '.HQNow'
extVersionCode = 4 extVersionCode = 5
libVersion = '1.2' libVersion = '1.2'
} }

View File

@ -1,6 +1,6 @@
package eu.kanade.tachiyomi.extension.pt.hqnow package eu.kanade.tachiyomi.extension.pt.hqnow
import eu.kanade.tachiyomi.lib.ratelimit.SpecificHostRateLimitInterceptor import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.network.asObservableSuccess
@ -17,7 +17,6 @@ import kotlinx.serialization.json.jsonArray
import kotlinx.serialization.json.jsonObject import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.put import kotlinx.serialization.json.put
import kotlinx.serialization.json.putJsonObject import kotlinx.serialization.json.putJsonObject
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
@ -27,6 +26,7 @@ import rx.Observable
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import java.text.Normalizer import java.text.Normalizer
import java.util.Locale import java.util.Locale
import java.util.concurrent.TimeUnit
class HQNow : HttpSource() { class HQNow : HttpSource() {
@ -39,8 +39,7 @@ class HQNow : HttpSource() {
override val supportsLatest = true override val supportsLatest = true
override val client: OkHttpClient = network.cloudflareClient.newBuilder() override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.addInterceptor(SpecificHostRateLimitInterceptor(GRAPHQL_URL.toHttpUrl(), 1)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.addInterceptor(SpecificHostRateLimitInterceptor(STATIC_URL.toHttpUrl(), 2))
.build() .build()
private val json: Json by injectLazy() private val json: Json by injectLazy()

View File

@ -6,7 +6,7 @@ ext {
extName = 'MangaTube' extName = 'MangaTube'
pkgNameSuffix = 'pt.mangatube' pkgNameSuffix = 'pt.mangatube'
extClass = '.MangaTube' extClass = '.MangaTube'
extVersionCode = 2 extVersionCode = 3
libVersion = '1.2' libVersion = '1.2'
} }

View File

@ -42,7 +42,7 @@ class MangaTube : HttpSource() {
override val supportsLatest = true override val supportsLatest = true
override val client: OkHttpClient = network.cloudflareClient.newBuilder() override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.addInterceptor(::searchIntercept) .addInterceptor(::searchIntercept)
.build() .build()

View File

@ -5,7 +5,7 @@ ext {
extName = 'MangaYabu!' extName = 'MangaYabu!'
pkgNameSuffix = 'pt.mangayabu' pkgNameSuffix = 'pt.mangayabu'
extClass = '.MangaYabu' extClass = '.MangaYabu'
extVersionCode = 8 extVersionCode = 9
libVersion = '1.2' libVersion = '1.2'
} }

View File

@ -39,7 +39,7 @@ class MangaYabu : ParsedHttpSource() {
.connectTimeout(2, TimeUnit.MINUTES) .connectTimeout(2, TimeUnit.MINUTES)
.readTimeout(2, TimeUnit.MINUTES) .readTimeout(2, TimeUnit.MINUTES)
.writeTimeout(2, TimeUnit.MINUTES) .writeTimeout(2, TimeUnit.MINUTES)
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun headersBuilder(): Headers.Builder = Headers.Builder() override fun headersBuilder(): Headers.Builder = Headers.Builder()

View File

@ -6,7 +6,7 @@ ext {
extName = 'Muito Mangá' extName = 'Muito Mangá'
pkgNameSuffix = 'pt.muitomanga' pkgNameSuffix = 'pt.muitomanga'
extClass = '.MuitoManga' extClass = '.MuitoManga'
extVersionCode = 2 extVersionCode = 3
libVersion = '1.2' libVersion = '1.2'
containsNsfw = true containsNsfw = true
} }

View File

@ -41,7 +41,7 @@ class MuitoManga : ParsedHttpSource() {
override val supportsLatest = true override val supportsLatest = true
override val client: OkHttpClient = network.cloudflareClient.newBuilder() override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.addInterceptor(::directoryCacheIntercept) .addInterceptor(::directoryCacheIntercept)
.build() .build()

View File

@ -6,7 +6,7 @@ ext {
extName = 'Mundo Mangá-Kun' extName = 'Mundo Mangá-Kun'
pkgNameSuffix = 'pt.mundomangakun' pkgNameSuffix = 'pt.mundomangakun'
extClass = '.MundoMangaKun' extClass = '.MundoMangaKun'
extVersionCode = 4 extVersionCode = 5
libVersion = '1.2' libVersion = '1.2'
containsNsfw = true containsNsfw = true
} }

View File

@ -35,7 +35,7 @@ class MundoMangaKun : ParsedHttpSource() {
override val supportsLatest = false override val supportsLatest = false
override val client: OkHttpClient = network.client.newBuilder() override val client: OkHttpClient = network.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun headersBuilder(): Headers.Builder = Headers.Builder() override fun headersBuilder(): Headers.Builder = Headers.Builder()

View File

@ -6,7 +6,7 @@ ext {
extName = 'One Piece Ex' extName = 'One Piece Ex'
pkgNameSuffix = 'pt.opex' pkgNameSuffix = 'pt.opex'
extClass = '.OnePieceEx' extClass = '.OnePieceEx'
extVersionCode = 3 extVersionCode = 4
libVersion = '1.2' libVersion = '1.2'
} }

View File

@ -35,7 +35,7 @@ class OnePieceEx : ParsedHttpSource() {
override val supportsLatest = false override val supportsLatest = false
override val client: OkHttpClient = network.cloudflareClient.newBuilder() override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun headersBuilder(): Headers.Builder = Headers.Builder() override fun headersBuilder(): Headers.Builder = Headers.Builder()

View File

@ -6,7 +6,7 @@ ext {
extName = 'Saikai Scan' extName = 'Saikai Scan'
pkgNameSuffix = 'pt.saikaiscan' pkgNameSuffix = 'pt.saikaiscan'
extClass = '.SaikaiScan' extClass = '.SaikaiScan'
extVersionCode = 6 extVersionCode = 7
libVersion = '1.2' libVersion = '1.2'
} }

View File

@ -36,7 +36,7 @@ class SaikaiScan : HttpSource() {
override val supportsLatest = true override val supportsLatest = true
override val client: OkHttpClient = network.cloudflareClient.newBuilder() override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
private val json: Json by injectLazy() private val json: Json by injectLazy()

View File

@ -5,7 +5,7 @@ ext {
extName = 'Tao Sect' extName = 'Tao Sect'
pkgNameSuffix = 'pt.taosect' pkgNameSuffix = 'pt.taosect'
extClass = '.TaoSect' extClass = '.TaoSect'
extVersionCode = 4 extVersionCode = 5
libVersion = '1.2' libVersion = '1.2'
} }

View File

@ -31,7 +31,7 @@ class TaoSect : ParsedHttpSource() {
override val supportsLatest = false override val supportsLatest = false
override val client: OkHttpClient = network.client.newBuilder() override val client: OkHttpClient = network.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build() .build()
override fun headersBuilder(): Headers.Builder = Headers.Builder() override fun headersBuilder(): Headers.Builder = Headers.Builder()

View File

@ -6,7 +6,7 @@ ext {
extName = 'Tsuki Mangás' extName = 'Tsuki Mangás'
pkgNameSuffix = 'pt.tsukimangas' pkgNameSuffix = 'pt.tsukimangas'
extClass = '.TsukiMangas' extClass = '.TsukiMangas'
extVersionCode = 22 extVersionCode = 23
libVersion = '1.2' libVersion = '1.2'
containsNsfw = true containsNsfw = true
} }

View File

@ -6,7 +6,7 @@ import android.text.InputType
import androidx.preference.EditTextPreference import androidx.preference.EditTextPreference
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.annotations.Nsfw import eu.kanade.tachiyomi.annotations.Nsfw
import eu.kanade.tachiyomi.lib.ratelimit.SpecificHostRateLimitInterceptor import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.network.asObservableSuccess
@ -39,6 +39,7 @@ import java.io.IOException
import java.text.ParseException import java.text.ParseException
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Locale import java.util.Locale
import java.util.concurrent.TimeUnit
@Nsfw @Nsfw
class TsukiMangas : HttpSource(), ConfigurableSource { class TsukiMangas : HttpSource(), ConfigurableSource {
@ -52,9 +53,7 @@ class TsukiMangas : HttpSource(), ConfigurableSource {
override val supportsLatest = true override val supportsLatest = true
override val client: OkHttpClient = network.cloudflareClient.newBuilder() override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.addInterceptor(SpecificHostRateLimitInterceptor(baseUrl.toHttpUrl(), 1)) .addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.addInterceptor(SpecificHostRateLimitInterceptor(CDN_1_URL, 1, period = 2))
.addInterceptor(SpecificHostRateLimitInterceptor(CDN_2_URL, 1, period = 2))
.addInterceptor(::tsukiAuthIntercept) .addInterceptor(::tsukiAuthIntercept)
.build() .build()