Add rate limiting to some sources (#6916)

* Add rate limiting to some Madara sources.

* Add rate limiting to some other sources.

* Add rate limiting to Hentaimimi (closes #6910).
This commit is contained in:
Alessandro Jean 2021-05-08 21:52:28 -03:00 committed by GitHub
parent 4906ee12e6
commit 050c71a011
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
33 changed files with 381 additions and 75 deletions

View File

@ -2,14 +2,25 @@ package eu.kanade.tachiyomi.extension.pt.baixarhentai
import eu.kanade.tachiyomi.multisrc.foolslide.FoolSlide
import eu.kanade.tachiyomi.annotations.Nsfw
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.source.model.SManga
import okhttp3.OkHttpClient
import org.jsoup.nodes.Document
import java.util.concurrent.TimeUnit
@Nsfw
class BaixarHentai : FoolSlide("Baixar Hentai", "https://leitura.baixarhentai.net", "pt-BR") {
class BaixarHentai : FoolSlide(
"Baixar Hentai",
"https://leitura.baixarhentai.net",
"pt-BR"
) {
// Hardcode the id because the language wasn't specific.
override val id: Long = 8908032188831949972
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
override fun mangaDetailsParse(document: Document): SManga {
return SManga.create().apply {
title = document.select("h1.title").text()

View File

@ -0,0 +1,4 @@
dependencies {
implementation project(':lib-ratelimit')
}

View File

@ -1,7 +1,22 @@
package eu.kanade.tachiyomi.extension.pt.argosscan
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class ArgosScan : Madara("Argos Scan", "https://argosscan.com", "pt-BR", SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("pt", "BR")))
class ArgosScan : Madara(
"Argos Scan",
"https://argosscan.com",
"pt-BR",
SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
override fun popularMangaSelector() = "div.page-item-detail.manga"
}

View File

@ -0,0 +1,22 @@
package eu.kanade.tachiyomi.extension.pt.cervoscanlator
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class CervoScanlator : Madara(
"Cervo Scanlator",
"https://cervoscan.xyz",
"pt-BR",
SimpleDateFormat("MMMMM dd, yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
override fun popularMangaSelector() = "div.page-item-detail.manga"
}

View File

@ -0,0 +1,20 @@
package eu.kanade.tachiyomi.extension.pt.darkyurealm
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class DarkyuRealm : Madara(
"Darkyu Realm",
"https://darkyuerealm.site",
"pt-BR",
SimpleDateFormat("dd 'de' MMMMM, yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
}

View File

@ -1,10 +1,26 @@
package eu.kanade.tachiyomi.extension.pt.dropescan
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET
import okhttp3.OkHttpClient
import okhttp3.Request
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class DropeScan : Madara(
"Drope Scan",
"https://dropescan.com",
"pt-BR",
SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
class DropeScan : Madara("Drope Scan", "https://dropescan.com", "pt-BR") {
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manga/page/$page/?m_orderby=views", headers)
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/manga/page/$page/?m_orderby=latest", headers)
}

View File

@ -1,7 +1,20 @@
package eu.kanade.tachiyomi.extension.pt.fdmscan
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class FDMScan : Madara("FDM Scan", "https://fdmscan.com", "pt-BR", SimpleDateFormat("MMMM dd, yyyy", Locale("pt", "BR")))
class FDMScan : Madara(
"FDM Scan",
"https://fdmscan.com",
"pt-BR",
SimpleDateFormat("MMMM dd, yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
}

View File

@ -1,7 +1,20 @@
package eu.kanade.tachiyomi.extension.pt.furioscans
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class FurioScans : Madara("Furio Scans", "https://furioscans.com", "pt-BR", SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()))
class FurioScans : Madara(
"Furio Scans",
"https://furioscans.com",
"pt-BR",
SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
}

View File

@ -1,7 +1,20 @@
package eu.kanade.tachiyomi.extension.pt.ichirinnohanayuri
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class IchirinNoHanaYuri : Madara("Ichirin No Hana Yuri", "https://ichirinnohanayuri.com.br", "pt-BR", SimpleDateFormat("dd/MM/yyyy", Locale("pt")))
class IchirinNoHanaYuri : Madara(
"Ichirin No Hana Yuri",
"https://ichirinnohanayuri.com.br",
"pt-BR",
SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
}

View File

@ -1,8 +1,20 @@
package eu.kanade.tachiyomi.extension.pt.littlemonsterscan
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class LittleMonsterScan : Madara("Little Monster Scan", "https://littlemonsterscan.com.br",
"pt-BR", SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("pt", "BR")))
class LittleMonsterScan : Madara(
"Little Monster Scan",
"https://littlemonsterscan.com.br",
"pt-BR",
SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
}

View File

@ -1,20 +1,27 @@
package eu.kanade.tachiyomi.extension.pt.mangateca
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.source.model.SChapter
import okhttp3.Headers
import okhttp3.OkHttpClient
import org.jsoup.nodes.Element
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class MangaTeca : Madara(
"MangaTeca",
"https://www.mangateca.com",
"pt-BR",
SimpleDateFormat("MMMM dd, yyyy", Locale("pt", "BR"))
SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
override fun headersBuilder(): Headers.Builder = Headers.Builder()
.add("User-Agent", USER_AGENT)
.add("Referer", baseUrl)
.add("Origin", baseUrl)
@ -27,9 +34,4 @@ class MangaTeca : Madara(
return parsedChapter
}
companion object {
private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " +
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"
}
}

View File

@ -0,0 +1,20 @@
package eu.kanade.tachiyomi.extension.pt.markscans
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class MarkScans : Madara(
"Mark Scans",
"https://markscans.online",
"pt-BR",
SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
}

View File

@ -1,7 +0,0 @@
package eu.kanade.tachiyomi.extension.pt.nekobreaker
import eu.kanade.tachiyomi.multisrc.madara.Madara
import java.text.SimpleDateFormat
import java.util.Locale
class NekoBreaker : Madara("NekoBreaker", "https://nekobreaker.com", "pt-BR", SimpleDateFormat("MMMM dd, yyyy", Locale("pt")))

View File

@ -1,5 +1,6 @@
package eu.kanade.tachiyomi.extension.pt.neoxscanlator
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.source.model.FilterList
import okhttp3.Headers
@ -17,18 +18,13 @@ class NeoxScanlator : Madara(
override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES)
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
override fun headersBuilder(): Headers.Builder = Headers.Builder()
.add("User-Agent", USER_AGENT)
.add("Referer", baseUrl)
.add("Origin", baseUrl)
// Only status and order by filter work.
override fun getFilterList(): FilterList = FilterList(super.getFilterList().slice(3..4))
companion object {
private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " +
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
}
}

View File

@ -1,12 +1,22 @@
package eu.kanade.tachiyomi.extension.pt.offscan
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class OffScan : Madara(
"Off Scan",
"https://offscan.top",
"pt-BR",
dateFormat = SimpleDateFormat("dd/MM/yy", Locale.US)
)
SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
override fun popularMangaSelector() = "div.page-item-detail.manga"
}

View File

@ -0,0 +1,20 @@
package eu.kanade.tachiyomi.extension.pt.origamiorpheans
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class OrigamiOrpheans : Madara(
"Origami Orpheans",
"https://origami-orpheans.com.br",
"pt-BR",
SimpleDateFormat("MMMMM dd, yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
}

View File

@ -1,7 +1,20 @@
package eu.kanade.tachiyomi.extension.pt.projetoscanlator
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class ProjetoScanlator : Madara("Projeto Scanlator", "https://projetoscanlator.com", "pt-BR", SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR")))
class ProjetoScanlator : Madara(
"Projeto Scanlator",
"https://projetoscanlator.com",
"pt-BR",
SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
}

View File

@ -1,7 +1,20 @@
package eu.kanade.tachiyomi.extension.pt.randomscan
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class RandomScan : Madara("Random Scan","https://randomscan.online","pt-BR", SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("pt", "BR")))
class RandomScan : Madara(
"Random Scan",
"https://randomscan.online",
"pt-BR",
SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
}

View File

@ -1,8 +1,20 @@
package eu.kanade.tachiyomi.extension.pt.shinzooscan
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class ShinzooScan : Madara(
"Shinzoo Scan",
"https://shinzooscan.xyz",
"pt-BR",
SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR"))
) {
class ShinzooScan : Madara("Shinzoo Scan", "https://shinzooscan.xyz", "pt-BR", SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR")))
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
}

View File

@ -1,12 +1,27 @@
package eu.kanade.tachiyomi.extension.pt.stagecomics
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.source.model.SChapter
import okhttp3.OkHttpClient
import org.jsoup.nodes.Element
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class StageComics : Madara(
"StageComics",
"https://stagecomics.com",
"pt-BR",
SimpleDateFormat("dd 'de' MMMMM 'de' yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
override fun popularMangaSelector() = "div.page-item-detail.manga"
class StageComics : Madara("StageComics", "https://stagecomics.com", "pt-BR", SimpleDateFormat("MMMM dd, yyyy", Locale("pt"))) {
override fun chapterFromElement(element: Element): SChapter {
val parsedChapter = super.chapterFromElement(element)

View File

@ -1,8 +1,20 @@
package eu.kanade.tachiyomi.extension.pt.threequeensscanlator
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class ThreeQueensScanlator : Madara("Three Queens Scanlator", "https://tqscan.com.br",
"pt-BR", SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("pt", "BR")))
class ThreeQueensScanlator : Madara(
"Three Queens Scanlator",
"https://tqscan.com.br",
"pt-BR",
SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
}

View File

@ -1,8 +1,22 @@
package eu.kanade.tachiyomi.extension.pt.warqueenscan
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class WarQueenScan : Madara("War Queen Scan", "https://wqscan.com", "pt-BR", SimpleDateFormat("dd/MM/yyyy", Locale.US))
class WarQueenScan : Madara(
"War Queen Scan",
"https://wqscan.com",
"pt-BR",
SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
override fun popularMangaSelector() = "div.page-item-detail.manga"
}

View File

@ -1,8 +1,20 @@
package eu.kanade.tachiyomi.extension.pt.winterscan
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class WinterScan : Madara("Winter Scan", "https://winterscan.com.br",
"pt-BR", SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("pt", "BR")))
class WinterScan : Madara(
"Winter Scan",
"https://winterscan.com.br",
"pt-BR",
SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("pt", "BR"))
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
}

View File

@ -1,12 +1,22 @@
package eu.kanade.tachiyomi.extension.pt.yuriverso
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class YuriVerso : Madara(
"Yuri Verso",
"https://yuri.live",
"pt-BR",
SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR"))
)
) {
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
override fun popularMangaSelector() = "div.page-item-detail.manga"
}

View File

@ -1,7 +1,14 @@
package eu.kanade.tachiyomi.extension.pt.animaregia
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.mmrcms.MMRCMS
import okhttp3.OkHttpClient
import java.util.concurrent.TimeUnit
class AnimaRegia : MMRCMS("AnimaRegia", "https://animaregia.net", "pt-BR"){
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))
.build()
}

View File

@ -0,0 +1,13 @@
package eu.kanade.tachiyomi.extension.pt.remangas
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.multisrc.mmrcms.MMRCMS
import okhttp3.OkHttpClient
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))
.build()
}

View File

@ -22,12 +22,11 @@ class SilenceScan : WPMangaStream(
"pt-BR",
SimpleDateFormat("MMMM dd, yyyy", Locale("pt", "BR"))
) {
private val rateLimitInterceptor = RateLimitInterceptor(4)
override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.addNetworkInterceptor(rateLimitInterceptor)
.addNetworkInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
@ -79,7 +78,7 @@ class SilenceScan : WPMangaStream(
.data()
.substringAfter("run(")
.substringBeforeLast(");")
.let { JSON_PARSER.parse(it) }
.let { JsonParser.parseString(it) }
.obj
if (chapterObj["sources"].array.size() == 0) {
@ -127,8 +126,4 @@ class SilenceScan : WPMangaStream(
Genre("Violência sexual", "violencia-sexual"),
Genre("Yuri", "yuri")
)
companion object {
private val JSON_PARSER by lazy { JsonParser() }
}
}

View File

@ -34,7 +34,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 = 1),
SingleLang("Baixar Hentai", "https://leitura.baixarhentai.net", "pt-BR", isNsfw = true, overrideVersionCode = 2),
MultiLang("HNI-Scantrad", "https://hni-scantrad.com", listOf("fr", "en"), className = "HNIScantradFactory", pkgName = "hniscantrad", overrideVersionCode = 1),
SingleLang("The Phoenix Scans", "https://www.phoenixscans.com", "it", className = "PhoenixScans"),
SingleLang("GTO The Great Site", "https://www.gtothegreatsite.net", "it", className = "GTO"),

View File

@ -24,7 +24,7 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("ApollComics", "https://apollcomics.xyz", "es"),
SingleLang("Arang Scans", "https://arangscans.com", "en", overrideVersionCode = 2),
SingleLang("ArazNovel", "https://www.araznovel.com", "tr"),
SingleLang("Argos Scan", "https://argosscan.com", "pt-BR"),
SingleLang("Argos Scan", "https://argosscan.com", "pt-BR", overrideVersionCode = 1),
SingleLang("Asgard Team", "https://www.asgard1team.com", "ar", overrideVersionCode = 1),
SingleLang("Astral Library", "https://www.astrallibrary.net", "en", overrideVersionCode = 1),
SingleLang("Atikrost", "https://atikrost.com", "tr"),
@ -47,7 +47,7 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Comics Valley", "https://comicsvalley.com", "hi", isNsfw = true),
SingleLang("CopyPasteScan", "https://copypastescan.xyz", "es"),
SingleLang("Cutie Pie", "https://cutiepie.ga", "tr"),
SingleLang("Darkyu Realm", "https://darkyuerealm.site", "pt-BR"),
SingleLang("Darkyu Realm", "https://darkyuerealm.site", "pt-BR", overrideVersionCode = 1),
SingleLang("Decadence Scans", "https://reader.decadencescans.com", "en", overrideVersionCode = 1),
SingleLang("شبكة كونان العربية", "https://www.manga.detectiveconanar.com", "ar", className = "DetectiveConanAr", overrideVersionCode = 1),
SingleLang("DiamondFansub", "https://diamondfansub.com", "tr"),
@ -55,13 +55,13 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("DoujinHentai", "https://doujinhentai.net", "es", isNsfw = true),
SingleLang("DoujinYosh", "https://doujinyosh.work", "id"),
SingleLang("Dream Manga", "https://en.ruyamanga.com", "en", overrideVersionCode = 1),
SingleLang("Drope Scan", "https://dropescan.com", "pt-BR"),
SingleLang("Drope Scan", "https://dropescan.com", "pt-BR", overrideVersionCode = 1),
SingleLang("Einherjar Scan", "https://einherjarscans.space", "en"),
SingleLang("FDM Scan", "https://fdmscan.com", "pt-BR"),
SingleLang("FDM Scan", "https://fdmscan.com", "pt-BR", overrideVersionCode = 1),
SingleLang("1st Kiss", "https://1stkissmanga.com", "en", className = "FirstKissManga", overrideVersionCode = 1),
SingleLang("1st Kiss Manhua", "https://1stkissmanhua.com", "en", className = "FirstKissManhua"),
SingleLang("FreeWebtoonCoins", "https://freewebtooncoins.com", "en"),
SingleLang("Furio Scans", "https://furioscans.com", "pt-BR"),
SingleLang("Furio Scans", "https://furioscans.com", "pt-BR", overrideVersionCode = 1),
SingleLang("موقع لترجمة المانجا", "https://golden-manga.com", "ar", className = "GoldenManga"),
SingleLang("GalaxyDegenScans", "https://gdegenscans.xyz/", "en"),
SingleLang("Glory Scans", "https://gloryscan.com", "pt-BR", isNsfw = true),
@ -73,7 +73,7 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Hiperdex", "https://hiperdex.com", "en", isNsfw = true, overrideVersionCode = 1),
SingleLang("Hscans", "https://hscans.com", "en", overrideVersionCode = 1),
SingleLang("Hunter Fansub", "https://hunterfansub.com", "es"),
SingleLang("Ichirin No Hana Yuri", "https://ichirinnohanayuri.com.br", "pt-BR"),
SingleLang("Ichirin No Hana Yuri", "https://ichirinnohanayuri.com.br", "pt-BR", overrideVersionCode = 1),
SingleLang("Immortal Updates", "https://immortalupdates.com", "en", overrideVersionCode = 1),
SingleLang("IsekaiScan.com", "https://isekaiscan.com", "en", className = "IsekaiScanCom", overrideVersionCode = 2),
SingleLang("IsekaiScanManga (unoriginal)", "https://isekaiscanmanga.com", "en", className = "IsekaiScanManga"),
@ -135,7 +135,7 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("MangaStein", "https://mangastein.com", "tr"),
SingleLang("Mangasushi", "https://mangasushi.net", "en", overrideVersionCode = 1),
SingleLang("Manga SY", "https://www.mangasy.com", "en"),
SingleLang("MangaTeca", "https://www.mangateca.com", "pt-BR"),
SingleLang("MangaTeca", "https://www.mangateca.com", "pt-BR", overrideVersionCode = 1),
SingleLang("Manga Too", "https://mangatoo.com/", "en"),
SingleLang("Manga Turf", "https://mangaturf.com", "en"),
SingleLang("MangaTX", "https://mangatx.com", "en"),
@ -169,7 +169,7 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("ManyToon", "https://manytoon.com", "en"),
SingleLang("ManyToonClub", "https://manytoon.club", "ko"),
SingleLang("ManyToon.me", "https://manytoon.me", "en", className = "ManyToonMe"),
SingleLang("Mark Scans", "https://markscans.online", "pt-BR"),
SingleLang("Mark Scans", "https://markscans.online", "pt-BR", overrideVersionCode = 1),
SingleLang("MG Komik", "https://mgkomik.my.id", "id"),
SingleLang("Midnight Mess Scans", "https://midnightmess.org", "en"),
SingleLang("Milftoon", "https://milftoon.xxx", "en", isNsfw = true, overrideVersionCode = 1),
@ -180,18 +180,17 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Mystical Merries", "https://mysticalmerries.com", "en"),
SingleLang("Nazarick Scans", "https://nazarickscans.com", "en"),
SingleLang("NeatManga", "https://neatmanga.com", "en"),
SingleLang("NekoBreaker", "https://nekobreaker.com", "pt-BR"),
SingleLang("NekoScan", "https://nekoscan.com", "en", overrideVersionCode = 1),
SingleLang("Neox Scanlator", "https://neoxscans.net", "pt-BR", overrideVersionCode = 1),
SingleLang("Neox Scanlator", "https://neoxscans.net", "pt-BR", overrideVersionCode = 2),
SingleLang("Night Comic", "https://www.nightcomic.com", "en"),
SingleLang("Niji Translations", "https://niji-translations.com", "ar"),
SingleLang("Ninjavi", "https://ninjavi.com", "ar", overrideVersionCode = 1),
SingleLang("Nitro Scans", "https://nitroscans.com", "en"),
SingleLang("NovelMic", "https://novelmic.com", "en"),
SingleLang("Off Scan", "https://offscan.top", "pt-BR"),
SingleLang("Off Scan", "https://offscan.top", "pt-BR", overrideVersionCode = 1),
SingleLang("مانجا اولاو", "https://olaoe.giize.com", "ar", className = "OlaoeManga"),
SingleLang("OnManga", "https://onmanga.com", "en"),
SingleLang("Origami Orpheans", "https://origami-orpheans.com.br", "pt-BR"),
SingleLang("Origami Orpheans", "https://origami-orpheans.com.br", "pt-BR", overrideVersionCode = 1),
SingleLang("Paean Scans", "https://paeanscans.com", "en"),
SingleLang("Painful Nightz Scan", "https://painfulnightzscan.com", "en"),
SingleLang("Pied Piper", "https://piedpiperfb.com", "tr"),
@ -199,7 +198,7 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Pojok Manga", "https://pojokmanga.com", "id", overrideVersionCode = 1),
SingleLang("PornComix", "https://www.porncomixonline.net", "en", isNsfw = true),
SingleLang("Prime Manga", "https://primemanga.com", "en"),
SingleLang("Projeto Scanlator", "https://projetoscanlator.com", "pt-BR"),
SingleLang("Projeto Scanlator", "https://projetoscanlator.com", "pt-BR", overrideVersionCode = 1),
SingleLang("QueensManga ملكات المانجا", "https://queensmanga.com", "ar", className = "QueensManga"),
SingleLang("Raider Scans", "https://raiderscans.com", "en"),
SingleLang("Random Translations", "https://randomtranslations.com", "en"),
@ -212,7 +211,7 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("SamuraiScan", "https://samuraiscan.com", "es"),
SingleLang("Setsu Scans", "https://setsuscans.com", "en"),
SingleLang("Shield Manga", "https://shieldmanga.club", "en", overrideVersionCode = 2),
SingleLang("Shinzoo Scan", "https://shinzooscan.xyz", "pt-BR", overrideVersionCode = 1),
SingleLang("Shinzoo Scan", "https://shinzooscan.xyz", "pt-BR", overrideVersionCode = 2),
SingleLang("Shooting Star Scans", "https://shootingstarscans.xyz", "en"),
SingleLang("ShoujoHearts", "https://shoujohearts.com", "en", overrideVersionCode = 1),
SingleLang("SISI GELAP", "https://sisigelap.club/", "id"),
@ -223,7 +222,7 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("SocialWeebs", "https://socialweebs.in/", "en"),
SingleLang("SoloScanlation", "https://soloscanlation.site", "en"),
SingleLang("Spooky Scanlations", "https://spookyscanlations.xyz", "es"),
SingleLang("StageComics", "https://stagecomics.com", "pt-BR"),
SingleLang("StageComics", "https://stagecomics.com", "pt-BR", overrideVersionCode = 1),
SingleLang("Sugar Babies", "https://sugarbscan.com", "en"),
SingleLang("TheTopComic", "https://thetopcomic.com", "en"),
SingleLang("365Manga", "https://365manga.com", "en", className = "ThreeSixtyFiveManga"),
@ -243,7 +242,7 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Uyuyan Balik", "https://uyuyanbalik.com/", "tr"),
SingleLang("Vanguard Bun", "https://vanguardbun.com/", "en"),
SingleLang("Wakascan", "https://wakascan.com", "fr"),
SingleLang("War Queen Scan", "https://wqscan.com", "pt-BR"),
SingleLang("War Queen Scan", "https://wqscan.com", "pt-BR", overrideVersionCode = 1),
SingleLang("WebNovel", "https://webnovel.live", "en", className = "WebNovelLive", overrideVersionCode = 1),
SingleLang("WebToonily", "https://webtoonily.com", "en"),
SingleLang("WebtoonUK", "https://webtoon.uk", "en"),
@ -254,7 +253,7 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Yaoi Fan Clube", "https://yaoifanclube.com.br", "pt-BR", isNsfw = true),
SingleLang("Yaoi Toshokan", "https://yaoitoshokan.net", "pt-BR", isNsfw = true, overrideVersionCode = 2),
SingleLang("Yokai Jump", "https://yokaijump.fr", "fr"),
SingleLang("Yuri Verso", "https://yuri.live", "pt-BR"),
SingleLang("Yuri Verso", "https://yuri.live", "pt-BR", overrideVersionCode = 1),
SingleLang("Zin Translator", "https://zinmanga.com", "en"),
SingleLang("ZManga", "https://zmanga.org", "es"),
SingleLang("Sleeping Knight Scans", "https://skscans.com", "en", overrideVersionCode = 2),
@ -266,16 +265,16 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Imperfect Comics", "https://imperfectcomic.com", "en"),
SingleLang("Ookamii Manga", "https://manga.ookamii.xyz/", "en"),
SingleLang("Mortals Groove", "https://mortalsgroove.com", "en"),
SingleLang("Cervo Scanlator", "https://cervoscan.xyz", "pt-BR"),
SingleLang("Cervo Scanlator", "https://cervoscan.xyz", "pt-BR", overrideVersionCode = 1),
SingleLang("Comic Star", "https://comicstar.org", "en"),
SingleLang("Reset Scans", "https://reset-scans.com", "en", overrideVersionCode = 2),
SingleLang("XuN Scans", "https://reader.xunscans.xyz", "en"),
SingleLang("Sani-Go", "https://sani-go.net", "ar", className = "SaniGo"),
SingleLang("Random Scan", "https://randomscan.online", "pt-BR", overrideVersionCode = 1),
SingleLang("Random Scan", "https://randomscan.online", "pt-BR", overrideVersionCode = 2),
SingleLang("Fukushuu no Yuusha", "https://fny-scantrad.com", "fr"),
SingleLang("Three Queens Scanlator", "https://tqscan.com.br", "pt-BR"),
SingleLang("Winter Scan", "https://winterscan.com.br", "pt-BR"),
SingleLang("Little Monster Scan", "https://littlemonsterscan.com.br", "pt-BR"),
SingleLang("Three Queens Scanlator", "https://tqscan.com.br", "pt-BR", overrideVersionCode = 1),
SingleLang("Winter Scan", "https://winterscan.com.br", "pt-BR", overrideVersionCode = 1),
SingleLang("Little Monster Scan", "https://littlemonsterscan.com.br", "pt-BR", overrideVersionCode = 1),
SingleLang("Wonderland", "https://landwebtoons.site", "pt-BR", overrideVersionCode = 1),
SingleLang("Pornwha", "https://pornwha.com", "en", isNsfw = true),
SingleLang("Wakamics", "https://wakamics.net", "en"),

View File

@ -59,8 +59,8 @@ 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"),
SourceData.Single("AnimaRegia", "https://animaregia.net", "pt-BR"),
SourceData.Single("Remangas", "https://remangas.top", "pt-BR", overrideVersionCode = 1),
SourceData.Single("AnimaRegia", "https://animaregia.net", "pt-BR", overrideVersionCode = 1),
SourceData.Single("MangaVadisi", "http://manga-v2.mangavadisi.org", "tr"),
SourceData.Single("MangaID", "https://mangaid.click", "id"),
SourceData.Single("Jpmangas", "https://jpmangas.co", "fr"),

View File

@ -41,7 +41,7 @@ class WPMangaStreamGenerator : ThemeSourceGenerator {
SingleLang("Manga Raw.org", "https://mangaraw.org", "ja", className = "MangaRawOrg", overrideVersionCode = 1),
SingleLang("Matakomik", "https://matakomik.com", "id"),
SingleLang("Manga Pro Z", "https://mangaproz.com", "ar"),
SingleLang("Silence Scan", "https://silencescan.net", "pt-BR"),
SingleLang("Silence Scan", "https://silencescan.net", "pt-BR", overrideVersionCode = 1),
SingleLang("Kuma Scans (Kuma Translation)", "https://kumascans.com", "en", className = "KumaScans"),
SingleLang("Tempest Manga", "https://manga.tempestfansub.com", "tr"),
SingleLang("xCaliBR Scans", "https://xcalibrscans.com", "en", overrideVersionCode = 2),

View File

@ -5,9 +5,13 @@ ext {
extName = 'HentaiMimi'
pkgNameSuffix = 'en.hentaimimi'
extClass = '.HentaiMimi'
extVersionCode = 2
extVersionCode = 3
libVersion = '1.2'
containsNsfw = true
}
dependencies {
implementation project(':lib-ratelimit')
}
apply from: "$rootDir/common.gradle"

View File

@ -1,6 +1,7 @@
package eu.kanade.tachiyomi.extension.en.hentaimimi
import eu.kanade.tachiyomi.annotations.Nsfw
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList
@ -9,10 +10,12 @@ import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.OkHttpClient
import okhttp3.Request
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import rx.Observable
import java.util.concurrent.TimeUnit
/*
* To Update Filter Values Run "FilterOptGen.kt"
@ -27,6 +30,10 @@ class HentaiMimi : ParsedHttpSource() {
override val name = "HentaiMimi"
override val supportsLatest = true
override val client: OkHttpClient = network.client.newBuilder()
.addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS))
.build()
// Latest
override fun latestUpdatesFromElement(element: Element): SManga {