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 client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build()
override fun mangaDetailsParse(document: Document): SManga {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -17,7 +17,7 @@ class DropeScan : Madara(
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build()
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()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build()
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -15,7 +15,7 @@ class Wonderland : Madara(
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build()
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()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build()
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()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build()
// Page has custom link to scan website.

View File

@ -15,7 +15,7 @@ class YuriVerso : Madara(
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build()
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 client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(2, 1, TimeUnit.SECONDS))
.addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build()
/**

View File

@ -17,7 +17,7 @@ class MangaLivre : MangasProject("Mangá Livre", "https://mangalivre.net", "pt-B
override val id: Long = 4762777556012432014
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(2, 1, TimeUnit.SECONDS))
.addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build()
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") {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(2, 1, TimeUnit.SECONDS))
.addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build()
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") {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build()
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 client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build()
}

View File

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

View File

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

View File

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

View File

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

View File

@ -32,7 +32,7 @@ class FoolSlideGenerator : ThemeSourceGenerator {
SingleLang("LupiTeam", "https://lupiteam.net", "it"),
SingleLang("Zandy no Fansub", "https://zandynofansub.aishiteru.org", "en"),
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),
SingleLang("QuegnaReader", "http://pignaquegna.altervista.org", "it"),
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("ArabMkr", "https://arabmkr.me", "ar"),
SingleLang("ArazNovel", "https://www.araznovel.com", "tr", overrideVersionCode = 1),
SingleLang("Argos Scan", "https://argosscan.com", "pt-BR", overrideVersionCode = 2),
SingleLang("Arthur Scan", "https://arthurscan.xyz", "pt-BR", overrideVersionCode = 1),
SingleLang("Argos Scan", "https://argosscan.com", "pt-BR", overrideVersionCode = 3),
SingleLang("Arthur Scan", "https://arthurscan.xyz", "pt-BR", overrideVersionCode = 2),
SingleLang("Asgard Team", "https://www.asgard1team.com", "ar", overrideVersionCode = 1),
SingleLang("Astral Library", "https://www.astrallibrary.net", "en", overrideVersionCode = 2),
SingleLang("Atikrost", "https://atikrost.com", "tr", overrideVersionCode = 1),
SingleLang("AZManhwa", "https://azmanhwa.net", "en"),
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("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("BestManhua", "https://bestmanhua.com", "en", overrideVersionCode = 2),
SingleLang("BlogManga", "https://blogmanga.net", "en"),
SingleLang("BoysLove", "https://boyslove.me", "en", overrideVersionCode = 2),
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("Cerise Scans", "https://cerisescans.com", "pt-BR", overrideVersionCode = 1),
SingleLang("Cervo Scanlator", "https://cervoscan.xyz", "pt-BR", overrideVersionCode = 2),
SingleLang("Cerise Scans", "https://cerisescans.com", "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("Clover Manga", "https://clover-manga.com", "tr", overrideVersionCode = 2),
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("ComicsWorld", "https://comicsworld.in", "hi"),
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("DiamondFansub", "https://diamondfansub.com", "tr", 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("Dream Manga", "https://en.ruyamanga.com", "en", overrideVersionCode = 2),
SingleLang("Drope Scan", "https://dropescan.com", "pt-BR", overrideVersionCode = 2),
SingleLang("Dream Union Scan", "https://www.dreamunionscan.com", "pt-BR"),
SingleLang("Drope Scan", "https://dropescan.com", "pt-BR", overrideVersionCode = 3),
SingleLang("Dream Union Scan", "https://www.dreamunionscan.com", "pt-BR", overrideVersionCode = 1),
SingleLang("Esomanga", "http://esomanga.com", "tr"),
SingleLang("Exo Scans", "https://exoscans.club", "en"),
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("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("Furio Scans", "https://furioscans.com", "pt-BR", overrideVersionCode = 2),
SingleLang("Fênix Scanlator", "https://fenixscanlator.xyz", "pt-BR", pkgName = "fenixscanlator", className = "FenixScanlator", overrideVersionCode = 1),
SingleLang("Furio Scans", "https://furioscans.com", "pt-BR", overrideVersionCode = 3),
SingleLang("Fênix Scanlator", "https://fenixscanlator.xyz", "pt-BR", pkgName = "fenixscanlator", className = "FenixScanlator", overrideVersionCode = 2),
SingleLang("GalaxyDegenScans", "https://gdegenscans.xyz/", "en", overrideVersionCode = 1),
SingleLang("Geass Hentai", "https://geasshentai.xyz", "pt-BR", isNsfw = true),
SingleLang("Glory Scans", "https://gloryscan.com", "pt-BR", isNsfw = true, overrideVersionCode = 1),
SingleLang("Geass Hentai", "https://geasshentai.xyz", "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("Graze Scans", "https://grazescans.com/", "en", 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("Immortal Updates", "https://immortalupdates.com", "en", overrideVersionCode = 1),
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("IsekaiScan.com", "https://isekaiscan.com", "en", className = "IsekaiScanCom", overrideVersionCode = 2),
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("Leviatan Scans X", "https://xxx.leviatanscans.com", "en", isNsfw = true),
SingleLang("Lily Manga", "https://lilymanga.com", "en"),
SingleLang("Lima Scans", "http://limascans.xyz/v2", "pt-BR", isNsfw = true, overrideVersionCode = 1),
SingleLang("Little Monster Scan", "https://littlemonsterscan.com.br", "pt-BR", overrideVersionCode = 2),
SingleLang("Lima Scans", "http://limascans.xyz/v2", "pt-BR", isNsfw = true, 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("LovableSubs", "https://lovablesubs.com", "tr", overrideVersionCode = 1),
SingleLang("MG Komik", "https://mgkomik.com", "id", overrideVersionCode = 2),
@ -202,7 +202,7 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("MangaToRead", "https://mangatoread.com", "en"),
SingleLang("MangaTK", "https://mangatk.com", "en"),
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("MangaUS", "https://mangaus.xyz", "en", overrideVersionCode = 2),
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("ManyToonClub", "https://manytoon.club", "ko", 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("MHentais", "https://mhentais.com", "pt-BR", isNsfw = true),
SingleLang("Mark Scans", "https://markscans.online", "pt-BR", overrideVersionCode = 3),
SingleLang("MHentais", "https://mhentais.com", "pt-BR", isNsfw = true, overrideVersionCode = 1),
SingleLang("Mhmanga", "https://mhmanga.com", "en"),
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("Milftoon", "https://milftoon.xxx", "en", isNsfw = true, overrideVersionCode = 2),
SingleLang("Mixed Manga", "https://mixedmanga.com", "en", overrideVersionCode = 1),
SingleLang("Mode Scanlator", "https://modescanlator.com", "pt-BR", overrideVersionCode = 1),
SingleLang("Moon Witch In Love", "https://moonwitchinlove.com", "pt-BR"),
SingleLang("Mode Scanlator", "https://modescanlator.com", "pt-BR", overrideVersionCode = 2),
SingleLang("Moon Witch In Love", "https://moonwitchinlove.com", "pt-BR", overrideVersionCode = 1),
SingleLang("Mortals Groove", "https://mortalsgroove.com", "en"),
SingleLang("Muctau", "https://muctau.com", "en"),
SingleLang("Mystical Merries", "https://mysticalmerries.com", "en", overrideVersionCode = 1),
SingleLang("NeatManga", "https://neatmanga.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("Night Comic", "https://www.nightcomic.com", "en", overrideVersionCode = 1),
SingleLang("Niji Translations", "https://niji-translations.com", "ar"),
@ -276,9 +276,9 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Nitro Scans", "https://nitroscans.com", "en"),
SingleLang("NovelMic", "https://novelmic.com", "en", overrideVersionCode = 1),
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("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("Painful Nightz Scan", "https://painfulnightzscan.com", "en"),
SingleLang("Platinum Crown", "https://platinumscans.com", "en", overrideVersionCode = 1),
@ -286,17 +286,17 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("PoManga", "https://pomanga.com", "en"),
SingleLang("PornComix", "https://www.porncomixonline.net", "en", isNsfw = true, overrideVersionCode = 1),
SingleLang("Pornwha", "https://pornwha.com", "en", isNsfw = true, overrideVersionCode = 1),
SingleLang("Prisma Scans", "https://prismascans.net", "pt-BR"),
SingleLang("Projeto Scanlator", "https://projetoscanlator.com", "pt-BR", overrideVersionCode = 2),
SingleLang("Prisma Scans", "https://prismascans.net", "pt-BR", overrideVersionCode = 1),
SingleLang("Projeto Scanlator", "https://projetoscanlator.com", "pt-BR", overrideVersionCode = 3),
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("Raw Mangas", "https://rawmangas.net", "ja", isNsfw = true, overrideVersionCode = 1),
SingleLang("RawDEX", "https://rawdex.net", "ko", isNsfw = true, overrideVersionCode = 1),
SingleLang("ReadAdult", "https://readadult.net", "en", isNsfw = true),
SingleLang("ReadManhua", "https://readmanhua.net", "en", overrideVersionCode = 2),
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("Reset Scans", "https://reset-scans.com", "en", overrideVersionCode = 3),
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("ShoujoHearts", "https://shoujohearts.com", "en", overrideVersionCode = 2),
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("Skymanga", "https://skymanga.co", "en", overrideVersionCode = 1),
SingleLang("SkyRaws", "https://skyraws.com", "en"),
SingleLang("Sleeping Knight Scans", "https://skscans.com", "en", overrideVersionCode = 2),
SingleLang("Sleepy Translations", "https://sleepytranslations.com/", "en", overrideVersionCode = 1),
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("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("TeenManhua", "https://teenmanhua.com", "en"),
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("Todaymic", "https://todaymic.com", "en"),
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("TruyenTranhAudio.com", "https://truyentranhaudio.com", "vi", className = "TruyenTranhAudioCom"),
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("Twilight Scans", "https://twilightscans.com", "en", 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("Uyuyan Balik", "https://uyuyanbalik.com/", "tr", overrideVersionCode = 1),
SingleLang("Vanguard Bun", "https://vanguardbun.com/", "en", overrideVersionCode = 1),
SingleLang("Vapo Scan", "https://vaposcan.net", "pt-BR"),
SingleLang("Visbellum", "https://visbellum.com", "pt-BR", overrideVersionCode = 1),
SingleLang("Vapo Scan", "https://vaposcan.net", "pt-BR", overrideVersionCode = 1),
SingleLang("Visbellum", "https://visbellum.com", "pt-BR", overrideVersionCode = 2),
SingleLang("Volkan Scans", "https://volkanscans.com", "en", overrideVersionCode = 1),
SingleLang("Wakamics", "https://wakamics.net", "en"),
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("WebToonily", "https://webtoonily.com", "en", isNsfw = true, overrideVersionCode = 1),
SingleLang("Webtoon Hatti", "https://webtoonhatti.com/", "tr"),
SingleLang("WebtoonScan", "https://webtoonscan.com", "en", isNsfw = true),
SingleLang("WebtoonUK", "https://webtoon.uk", "en", overrideVersionCode = 2),
SingleLang("WebtoonXYZ", "https://www.webtoon.xyz", "en", isNsfw = true, overrideVersionCode = 3),
SingleLang("Winter Scan", "https://winterscan.com.br", "pt-BR", overrideVersionCode = 2),
SingleLang("Wonderland", "https://landwebtoons.site", "pt-BR", overrideVersionCode = 2),
SingleLang("Winter Scan", "https://winterscan.com.br", "pt-BR", overrideVersionCode = 3),
SingleLang("Wonderland", "https://landwebtoons.site", "pt-BR", overrideVersionCode = 3),
SingleLang("WoopRead", "https://woopread.com", "en", overrideVersionCode = 1),
SingleLang("WuxiaWorld", "https://wuxiaworld.site", "en", overrideVersionCode = 1),
SingleLang("XManga", "https://xmanga.io", "en", isNsfw = true),
SingleLang("XManhwa", "https://xmanhwa.com", "en", isNsfw = true),
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 Toshokan", "https://yaoitoshokan.net", "pt-BR", isNsfw = true, overrideVersionCode = 2),
SingleLang("Yuri Verso", "https://yuri.live", "pt-BR", overrideVersionCode = 2),
SingleLang("Yaoi Toshokan", "https://yaoitoshokan.net", "pt-BR", isNsfw = true, overrideVersionCode = 3),
SingleLang("Yuri Verso", "https://yuri.live", "pt-BR", overrideVersionCode = 3),
SingleLang("Zinmanga", "https://zinmanga.com", "en"),
SingleLang("Zinmanhwa", "https://zinmanhwa.com", "en"),
SingleLang("ZuttoManga", "https://zuttomanga.com", "en"),

View File

@ -9,7 +9,7 @@ class MangasProjectGenerator : ThemeSourceGenerator {
override val themeClass = "MangasProject"
override val baseVersionCode: Int = 6
override val baseVersionCode: Int = 7
override val sources = listOf(
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("Mangazuki Raws", "https://raws.mangazuki.co", "ko"),
SourceData.Single("Mangazuki", "https://mangazuki.co", "en"),
SourceData.Single("Remangas", "https://remangas.top", "pt-BR", overrideVersionCode = 1),
SourceData.Single("AnimaRegia", "https://animaregia.net", "pt-BR", overrideVersionCode = 1),
SourceData.Single("Remangas", "https://remangas.top", "pt-BR", overrideVersionCode = 2),
SourceData.Single("AnimaRegia", "https://animaregia.net", "pt-BR", overrideVersionCode = 2),
SourceData.Single("MangaVadisi", "http://manga-v2.mangavadisi.org", "tr"),
SourceData.Single("MangaID", "https://mangaid.click", "id"),
SourceData.Single("Jpmangas", "https://jpmangas.co", "fr"),
SourceData.Single("Op-VF", "https://www.op-vf.com", "fr", className = "OpVF"),
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("Ama Scans", "https://amascan.com", "pt-BR", isNsfw = true),
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, overrideVersionCode = 1),
// NOTE: THIS SOURCE CONTAINS A CUSTOM LANGUAGE SYSTEM (which will be ignored)!
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"),

View File

@ -36,7 +36,7 @@ class WPMangaStreamGenerator : ThemeSourceGenerator {
SingleLang("Manga Raw.org", "https://mangaraw.org", "ja", className = "MangaRawOrg", overrideVersionCode = 1),
SingleLang("Manga Pro Z", "https://mangaproz.com", "ar"),
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("Tempest Manga", "https://manga.tempestfansub.com", "tr"),
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("The Apollo Team", "https://theapollo.team", "en"),
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("Geass Scanlator", "https://geassscan.xyz", "pt-BR")
SingleLang("Geass Scanlator", "https://geassscan.xyz", "pt-BR", overrideVersionCode = 1)
)
companion object {

View File

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

View File

@ -1,5 +1,6 @@
package eu.kanade.tachiyomi.extension.all.noisemanga
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
@ -8,11 +9,13 @@ import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import okhttp3.Headers
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import rx.Observable
import java.util.concurrent.TimeUnit
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 client: OkHttpClient = network.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 2, TimeUnit.SECONDS))
.build()
override fun headersBuilder(): Headers.Builder = Headers.Builder()
.add("User-Agent", USER_AGENT)
.add("Origin", baseUrl)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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