Madara split: part 1 (#5662)

* madara 161

* 50 of madara sources

* remove moved classes part 1
This commit is contained in:
Aria Moradi
2021-02-07 07:37:31 -08:00
committed by GitHub
parent f275fc07c2
commit ee33c8fa02
44 changed files with 1461 additions and 701 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View File

@ -0,0 +1,13 @@
package eu.kanade.tachiyomi.extension.tr.adonisfansub
import eu.kanade.tachiyomi.annotations.Nsfw
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET
import okhttp3.Request
@Nsfw
class AdonisFansub : Madara("Adonis Fansub", "https://manga.adonisfansub.com", "tr") {
override val userAgentRandomizer = ""
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

@ -0,0 +1,43 @@
package eu.kanade.tachiyomi.extension.en.agentofchangetranslations
import android.annotation.SuppressLint
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.Headers
import okhttp3.Response
class AgentofChangeTranslations : Madara("Agent of Change Translations", "https://aoc.moe", "en") {
override fun headersBuilder(): Headers.Builder = super.headersBuilder().add("Referer", baseUrl)
override fun popularMangaSelector() = "div.page-item-detail.manga:has(span.chapter)"
override fun chapterListSelector() = "li.wp-manga-chapter:has(a)"
@SuppressLint("DefaultLocale")
override fun chapterListParse(response: Response): List<SChapter> {
return response.asJsoup().let { document ->
document.select(chapterListSelector()).let { normalChapters ->
if (normalChapters.isNotEmpty()) {
normalChapters.map { chapterFromElement(it) }
} else {
// For their "fancy" volume/chapter lists
document.select("div.wpb_wrapper:contains(volume) a")
.filter { it.attr("href").contains(baseUrl) && !it.attr("href").contains("imgur") }
.map { volumeChapter ->
SChapter.create().apply {
volumeChapter.attr("href").let { url ->
name = if (url.contains("volume")) {
val volume = url.substringAfter("volume-").substringBefore("/")
val volChap = url.substringAfter("volume-$volume/").substringBefore("/").replace("-", " ").capitalize()
"Volume $volume - $volChap"
} else {
url.substringBefore("/p").substringAfterLast("/").replace("-", " ").capitalize()
}
setUrlWithoutDomain(url.substringBefore("?") + "?style=list")
}
}
}
}.reversed()
}
}
}
}

View File

@ -0,0 +1,151 @@
package eu.kanade.tachiyomi.extension.en.allporncomic
import eu.kanade.tachiyomi.annotations.Nsfw
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET
import okhttp3.Request
@Nsfw
class AllPornComic : Madara("AllPornComic", "https://allporncomic.com", "en") {
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)
override fun searchMangaNextPageSelector() = "a[rel=next]"
override fun getGenreList() = listOf(
Genre("3D", "3d"),
Genre("Ahegao", "ahegao"),
Genre("Alien Girl", "alien-girl"),
Genre("Anal", "anal"),
Genre("Anime", "anime"),
Genre("Anthology", "anthology"),
Genre("Artbook", "artbook"),
Genre("BBW / Chubby / Fat Woman", "bbw"),
Genre("BDSM", "bdsm"),
Genre("Big Areolae", "big-areolae"),
Genre("Big Ass", "big-ass"),
Genre("Big Balls", "big-balls"),
Genre("Big Breasts", "big-breasts"),
Genre("Big Clit", "big-clit"),
Genre("Big Nipples", "big-nipples"),
Genre("Big Penis", "big-penis"),
Genre("Bikini", "bikini"),
Genre("Blackmail", "blackmail"),
Genre("Blindfold", "blindfold"),
Genre("Body Modification", "body-modification"),
Genre("Body Swap", "body-swap"),
Genre("Body Writing", "body-writing"),
Genre("BodyStocking", "bodystocking"),
Genre("Bodysuit", "bodysuit"),
Genre("Bondage", "bondage"),
Genre("Brain Fuck", "brain-fuck"),
Genre("Cartoon", "cartoon"),
Genre("Cheerleader", "cheerleader"),
Genre("Chinese Dress", "chinese-dress"),
Genre("Collar / Choker", "collar"),
Genre("Comedy", "comedy"),
Genre("Corruption", "corruption"),
Genre("Corset", "corset"),
Genre("Crotch Tattoo", "crotch-tattoo"),
Genre("Dark Skin", "dark-skin"),
Genre("Demon Girl / Succubus", "demon-girl"),
Genre("Dick Growth", "dick-growth"),
Genre("Dickgirl On Dickgirl", "dickgirl-on-dickgirl"),
Genre("Dickgirl On Male", "dickgirl-on-male"),
Genre("Dickgirls Only", "dickgirls-only"),
Genre("Drugs", "drugs"),
Genre("Drunk", "drunk"),
Genre("Exhibitionism", "exhibitionism"),
Genre("FFM Threesome", "ffm-threesome"),
Genre("FFT Threesome", "fft-threesome"),
Genre("Females Only", "females-only"),
Genre("Femdom", "femdom"),
Genre("Feminization", "feminization"),
Genre("Full Body Tattoo", "full-body-tattoo"),
Genre("Full Color", "full-color"),
Genre("Futanari", "futanari"),
Genre("Gender Bender", "gender-bender"),
Genre("Glasses", "glasses"),
Genre("Group", "group"),
Genre("Gyaru", "gyaru"),
Genre("Gyaru-OH", "gyaru-oh"),
Genre("Harem", "harem"),
Genre("Hentai", "hentai"),
Genre("Human Pet", "human-pet"),
Genre("Humiliation", "humiliation"),
Genre("Impregnation", "impregnation"),
Genre("Incest", "incest"),
Genre("Interracial", "interracial"),
Genre("Kimono", "kimono"),
Genre("Latex", "latex"),
Genre("Leash", "leash"),
Genre("Lingerie", "lingerie"),
Genre("Lolicon", "lolicon"),
Genre("MILF", "milf"),
Genre("MMF Threesome", "mmf-threesome"),
Genre("MMT Threesome", "mmt-threesome"),
Genre("Magical Girl", "magical-girl"),
Genre("Maid", "maid"),
Genre("Male On Dickgirl", "male-on-dickgirl"),
Genre("Manhwa", "manhwa"),
Genre("Military", "military"),
Genre("Milking", "milking"),
Genre("Mind Break", "mind-break"),
Genre("Mind Control", "mind-control"),
Genre("Monster Girl", "monster-girl"),
Genre("Moral Degeneration", "moral-degeneration"),
Genre("Muscle", "muscle"),
Genre("Muscle Growth", "muscle-growth"),
Genre("Nakadashi", "nakadashi"),
Genre("Netorare", "netorare"),
Genre("Netori", "netori"),
Genre("Ninja", "ninja"),
Genre("Nun", "nun"),
Genre("Nurse", "nurse"),
Genre("Orgy", "orgy"),
Genre("Paizuri", "paizuri"),
Genre("Pegging", "pegging"),
Genre("Piercing", "piercing"),
Genre("Pixie Cut", "pixie-cut"),
Genre("Policewoman", "policewoman"),
Genre("Possession", "possession"),
Genre("Retro", "retro"),
Genre("Ryona", "ryona"),
Genre("School Swimsuit", "school-swimsuit"),
Genre("Schoolboy Uniform", "schoolboy-uniform"),
Genre("Schoolgirl Uniform", "schoolgirl-uniform"),
Genre("Shared Senses", "shared-senses"),
Genre("Shemale", "shemale"),
Genre("Shibari", "shibari"),
Genre("Shotacon", "shotacon"),
Genre("Slave", "slave"),
Genre("Slime Girl", "slime-girl"),
Genre("Small Breasts", "small-breasts"),
Genre("Stockings", "stockings"),
Genre("Strap-on", "strap-on"),
Genre("Stuck In Wall", "stuck-in-wall"),
Genre("Superhero", "superhero"),
Genre("Superheroine", "superheroine"),
Genre("Tail", "tail"),
Genre("Tail Plug", "tail-plug"),
Genre("Tankoubon", "tankoubon"),
Genre("Tentacles", "tentacles"),
Genre("Thigh High Boots", "thigh-high-boots"),
Genre("Tights", "tights"),
Genre("Time Stop", "time-stop"),
Genre("Tomboy", "tomboy"),
Genre("Tomgirl", "tomgirl"),
Genre("Torture", "torture"),
Genre("Transformation", "transformation"),
Genre("Uncensored", "uncensored"),
Genre("Unusual Pupils", "unusual-pupils"),
Genre("Unusual Teeth", "unusual-teeth"),
Genre("Vampire", "vampire"),
Genre("Virginity", "virginity"),
Genre("Voyeurism", "voyeurism"),
Genre("Webtoon", "webtoon"),
Genre("Western", "western"),
Genre("Witch", "witch"),
Genre("Yandere", "yandere"),
Genre("Yaoi", "yaoi"),
Genre("Yuri", "yuri")
)
}

View File

@ -0,0 +1,7 @@
package eu.kanade.tachiyomi.extension.en.aloalivn
import eu.kanade.tachiyomi.multisrc.madara.Madara
class Aloalivn : Madara("Aloalivn", "https://aloalivn.com", "en") {
override val pageListParseSelector = "li.blocks-gallery-item"
}

View File

@ -0,0 +1,11 @@
package eu.kanade.tachiyomi.extension.en.animangaes
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.source.model.SChapter
import okhttp3.Response
class AniMangaEs : Madara("AniMangaEs", "http://animangaes.com", "en") {
override val pageListParseSelector = "div.text-left noscript"
override val chapterUrlSuffix = ""
override fun chapterListParse(response: Response): List<SChapter> = super.chapterListParse(response).reversed()
}

View File

@ -0,0 +1,7 @@
package eu.kanade.tachiyomi.extension.es.apollcomics
import eu.kanade.tachiyomi.multisrc.madara.Madara
import java.text.SimpleDateFormat
import java.util.Locale
class ApollComics : Madara("ApollComics", "https://apollcomics.xyz", "es", SimpleDateFormat("dd MMMM, yyyy", Locale("es")))

View File

@ -0,0 +1,15 @@
package eu.kanade.tachiyomi.extension.en.arangscans
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET
import okhttp3.Request
import java.text.SimpleDateFormat
import java.util.Locale
class ArangScans : Madara("Arang Scans", "https://www.arangscans.com", "en", SimpleDateFormat("d MMM yyyy", Locale.US)) {
// has very few manga
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manga?m_orderby=views", headers)
override fun popularMangaNextPageSelector(): String? = null
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/manga?m_orderby=latest", headers)
override fun latestUpdatesNextPageSelector(): String? = null
}

View File

@ -0,0 +1,74 @@
package eu.kanade.tachiyomi.extension.tr.araznovel
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.FormBody
import okhttp3.Response
import java.text.SimpleDateFormat
import java.util.Locale
class ArazNovel : Madara("ArazNovel", "https://www.araznovel.com", "tr", SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())) {
override fun formBuilder(page: Int, popular: Boolean): FormBody.Builder = super.formBuilder(page, popular)
.add("vars[meta_query][0][0][value]", "manga")
override fun getGenreList() = listOf(
Genre("Aksiyon", "action"),
Genre("Macera", "adventure"),
Genre("Cartoon", "cartoon"),
Genre("Comic", "comic"),
Genre("Komedi", "comedy"),
Genre("Yemek", "cooking"),
Genre("Doujinshi", "doujinshi"),
Genre("Dram", "drama"),
Genre("Ecchi", "ecchi"),
Genre("Fantastik", "fantasy"),
Genre("Harem", "harem"),
Genre("Tarihi", "historical"),
Genre("Korku", "horror"),
Genre("Manga", "manga"),
Genre("Manhua", "manhua"),
Genre("Manhwa", "manhwa"),
Genre("Olgun", "mature"),
Genre("Mecha", "mecha"),
Genre("Yetişkin", "adult"),
Genre("Gizem", "mystery"),
Genre("One Shot", "one-shot"),
Genre("Isekai", "isekai"),
Genre("Josei", "josei"),
Genre("Dedektif", "detective"),
Genre("Karanlık", "smut"),
Genre("Romantizm", "romance"),
Genre("Okul Yaşamı", "school-life"),
Genre("Yaşamdan Kesit", "slice-of-life"),
Genre("Spor", "sports"),
Genre("Doğa Üstü", "supernatural"),
Genre("Trajedi", "tragedy"),
Genre("Webtoon ", "webtoon"),
Genre("Dövüş Sanatları ", "martial-arts"),
Genre("Bilim Kurgu", "sci-fi"),
Genre("Seinen", "seinen"),
Genre("Shoujo", "shoujo"),
Genre("Shoujo Ai", "shoujo-ai"),
Genre("Shounen", "shounen"),
Genre("Shounen Ai", "shounen-ai"),
Genre("Soft Yaoi", "soft-yaoi"),
Genre("Soft Yuri", "soft-yuri"),
Genre("Yaoi", "yaoi"),
Genre("Yuri", "yuri")
)
override fun chapterListParse(response: Response): List<SChapter> {
return getXhrChapters(response.asJsoup().select("div#manga-chapters-holder").attr("data-id")).let { document ->
document.select("li.parent").let { elements ->
if (!elements.isNullOrEmpty()) {
elements.reversed()
.map { volumeElement -> volumeElement.select(chapterListSelector()).map { chapterFromElement(it) } }
.flatten()
} else {
document.select(chapterListSelector()).map { chapterFromElement(it) }
}
}
}
}
}

View File

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

View File

@ -0,0 +1,20 @@
package eu.kanade.tachiyomi.extension.en.astrallibrary
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.SChapter
import okhttp3.Request
import okhttp3.Response
import java.text.SimpleDateFormat
import java.util.Locale
class AstralLibrary : Madara("Astral Library", "https://www.astrallibrary.net", "en", SimpleDateFormat("d MMM", Locale.US)) {
override fun chapterListParse(response: Response): List<SChapter> = super.chapterListParse(response).reversed()
override fun popularMangaRequest(page: Int): Request {
return GET("$baseUrl/manga-tag/manga/?m_orderby=views&page=$page", headers)
}
override fun latestUpdatesRequest(page: Int): Request {
return GET("$baseUrl/manga-tag/manga/?m_orderby=latest&page=$page", headers)
}
}

View File

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

View File

@ -0,0 +1,7 @@
package eu.kanade.tachiyomi.extension.fr.atmsubs
import eu.kanade.tachiyomi.multisrc.madara.Madara
import java.text.SimpleDateFormat
import java.util.Locale
class ATMSubs : Madara("ATM-Subs", "https://atm-subs.fr", "fr", SimpleDateFormat("d MMMM yyyy", Locale("fr")))

View File

@ -0,0 +1,22 @@
package eu.kanade.tachiyomi.extension.fr.atmsubs
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.SChapter
import okhttp3.Request
import org.jsoup.nodes.Element
class Azora : Madara("Azora", "https://www.azoramanga.com", "ar") {
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/page/$page/?m_orderby=views", headers)
override fun chapterListSelector() = "li.wp-manga-chapter:not(.premium-block)" // Filter fake chapters
override fun chapterFromElement(element: Element): SChapter {
val chapter = SChapter.create()
element.select("a").let {
chapter.url = it.attr("href").substringAfter(baseUrl)
chapter.name = it.text()
}
return chapter
}
}

View File

@ -0,0 +1,7 @@
package eu.kanade.tachiyomi.extension.ru.bestmanga
import eu.kanade.tachiyomi.multisrc.madara.Madara
import java.text.SimpleDateFormat
import java.util.Locale
class BestManga : Madara("BestManga", "https://bestmanga.club", "ru", SimpleDateFormat("dd.MM.yyyy", Locale.getDefault()))

View File

@ -0,0 +1,7 @@
package eu.kanade.tachiyomi.extension.en.bestmanhua
import eu.kanade.tachiyomi.multisrc.madara.Madara
class BestManhua : Madara("BestManhua", "https://bestmanhua.com", "en") {
override val pageListParseSelector = "li.blocks-gallery-item"
}

View File

@ -0,0 +1,16 @@
package eu.kanade.tachiyomi.extension.th.cattranslator
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.POST
import okhttp3.CacheControl
import okhttp3.Request
class CatTranslator : Madara("CAT-translator", "https://cat-translator.com", "th") {
override fun popularMangaRequest(page: Int): Request =
POST("$baseUrl/manga/wp-admin/admin-ajax.php", formHeaders, formBuilder(page, true).build(), CacheControl.FORCE_NETWORK)
override fun latestUpdatesRequest(page: Int): Request =
POST("$baseUrl/manga/wp-admin/admin-ajax.php", formHeaders, formBuilder(page, false).build(), CacheControl.FORCE_NETWORK)
override fun searchPage(page: Int): String = "manga/page/$page/"
}

View File

@ -0,0 +1,7 @@
package eu.kanade.tachiyomi.extension.en.chibimanga
import eu.kanade.tachiyomi.multisrc.madara.Madara
import java.text.SimpleDateFormat
import java.util.Locale
class ChibiManga : Madara("Chibi Manga", "https://www.cmreader.info", "en", dateFormat = SimpleDateFormat("MMM dd, yyyy", Locale.US))

View File

@ -0,0 +1,7 @@
package eu.kanade.tachiyomi.extension.en.chibimanga
import eu.kanade.tachiyomi.multisrc.madara.Madara
import java.text.SimpleDateFormat
import java.util.Locale
class CloverManga : Madara("Clover Manga", "Clover Manga", "tr", SimpleDateFormat("MMMM dd, yyyy", Locale("tr")))

View File

@ -0,0 +1,7 @@
package eu.kanade.tachiyomi.extension.en.comickiba
import eu.kanade.tachiyomi.multisrc.madara.Madara
class ComicKiba : Madara("ComicKiba", "https://comickiba.com", "en") {
override val pageListParseSelector = "li.blocks-gallery-item img:nth-child(1), div.reading-content p > img, .read-container .reading-content img"
}

View File

@ -0,0 +1,7 @@
package eu.kanade.tachiyomi.extension.tr.cutiepie
import eu.kanade.tachiyomi.multisrc.madara.Madara
import java.text.SimpleDateFormat
import java.util.Locale
class CutiePie : Madara("Cutie Pie", "https://cutiepie.ga", "tr", SimpleDateFormat("dd MMMM yyyy", Locale.forLanguageTag("tr")))

View File

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

View File

@ -0,0 +1,21 @@
package eu.kanade.tachiyomi.extension.en.disasterscans
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.source.model.SManga
import org.jsoup.nodes.Document
class DisasterScans : Madara("Disaster Scans", "https://disasterscans.com", "en") {
override val popularMangaUrlSelector = "div.post-title a:last-child"
override fun mangaDetailsParse(document: Document): SManga {
val manga = super.mangaDetailsParse(document)
with(document) {
select("div.post-title h1").first()?.let {
manga.title = it.ownText()
}
}
return manga
}
}

View File

@ -0,0 +1,106 @@
package eu.kanade.tachiyomi.extension.es.doujinhentai
import eu.kanade.tachiyomi.annotations.Nsfw
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.SManga
import okhttp3.HttpUrl
import okhttp3.Request
import org.jsoup.nodes.Element
import java.text.SimpleDateFormat
import java.util.Locale
@Nsfw
class DoujinHentai : Madara("DoujinHentai", "https://doujinhentai.net", "es", SimpleDateFormat("d MMM. yyyy", Locale.ENGLISH)) {
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/lista-manga-hentai?orderby=views&page=$page", headers)
override fun popularMangaSelector() = "div.col-md-3 a"
override fun popularMangaFromElement(element: Element): SManga {
val manga = SManga.create()
manga.setUrlWithoutDomain(element.attr("href"))
manga.title = element.select("h5").text()
manga.thumbnail_url = element.select("img").attr("abs:data-src")
return manga
}
override fun popularMangaNextPageSelector() = "a[rel=next]"
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/lista-manga-hentai?orderby=last&page=$page", headers)
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
val url = HttpUrl.parse(baseUrl)!!.newBuilder()
if (query.isNotBlank()) {
url.addPathSegment("search")
url.addQueryParameter("query", query) // query returns results all on one page
} else {
filters.forEach { filter ->
when (filter) {
is GenreSelectFilter -> {
if (filter.state != 0) {
url.addPathSegments("lista-manga-hentai/category/${filter.toUriPart()}")
url.addQueryParameter("page", page.toString())
}
}
}
}
}
return GET(url.build().toString(), headers)
}
override fun searchMangaSelector() = "div.c-tabs-item__content > div.c-tabs-item__content, ${popularMangaSelector()}"
override fun searchMangaFromElement(element: Element): SManga {
return if (element.hasAttr("href")) {
popularMangaFromElement(element) // genre search results
} else {
super.searchMangaFromElement(element) // query search results
}
}
override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
override fun chapterListSelector() = "ul.main.version-chap > li.wp-manga-chapter:not(:last-child)" // removing empty li
override val pageListParseSelector = "div#all > img.img-responsive"
override fun getFilterList() = FilterList(
Filter.Header("Solo funciona si la consulta está en blanco"),
GenreSelectFilter()
)
class GenreSelectFilter : UriPartFilter(
"Búsqueda de género",
arrayOf(
Pair("<seleccionar>", ""),
Pair("Ecchi", "ecchi"),
Pair("Yaoi", "yaoi"),
Pair("Yuri", "yuri"),
Pair("Anal", "anal"),
Pair("Tetonas", "tetonas"),
Pair("Escolares", "escolares"),
Pair("Incesto", "incesto"),
Pair("Virgenes", "virgenes"),
Pair("Masturbacion", "masturbacion"),
Pair("Maduras", "maduras"),
Pair("Lolicon", "lolicon"),
Pair("Bikini", "bikini"),
Pair("Sirvientas", "sirvientas"),
Pair("Enfermera", "enfermera"),
Pair("Embarazada", "embarazada"),
Pair("Ahegao", "ahegao"),
Pair("Casadas", "casadas"),
Pair("Chica Con Pene", "chica-con-pene"),
Pair("Juguetes Sexuales", "juguetes-sexuales"),
Pair("Orgias", "orgias"),
Pair("Harem", "harem"),
Pair("Romance", "romance"),
Pair("Profesores", "profesores"),
Pair("Tentaculos", "tentaculos"),
Pair("Mamadas", "mamadas"),
Pair("Shota", "shota"),
Pair("Interracial", "interracial"),
Pair("Full Color", "full-colo"),
Pair("Sin Censura", "sin-censura"),
Pair("Futanari", "futanari"),
Pair("Doble Penetracion", "doble-penetracion"),
Pair("Cosplay", "cosplay")
)
)
}

View File

@ -0,0 +1,96 @@
package eu.kanade.tachiyomi.extension.id.doujinyosh
import eu.kanade.tachiyomi.multisrc.madara.Madara
class DoujinYosh : Madara("DoujinYosh", "https://doujinyosh.work", "id") {
// source issue, doing this limits results to one page but not doing it returns no results at all
override fun searchPage(page: Int) = ""
override fun getGenreList() = listOf(
Genre("4 Koma", "4koma"),
Genre("Adult", "adult"),
Genre("Ahegao", "ahegao"),
Genre("Anal", "anal"),
Genre("Animal", "animal"),
Genre("Artist CG", "artist-cg"),
Genre("Big Breast", "big-breast"),
Genre("Big Penis", "big-penis"),
Genre("Bikini", "bikini"),
Genre("Black Mail", "black-mail"),
Genre("Blowjob", "blowjob"),
Genre("Body Swap", "body-swap"),
Genre("Bondage", "bondage"),
Genre("Cheating", "cheating"),
Genre("Crossdressing", "crossdressing"),
Genre("DILF", "dilf"),
Genre("Dark Skin", "dark-skin"),
Genre("Defloration", "defloration"),
Genre("Demon Girl", "demon-girl"),
Genre("Doujin", "doujin"),
Genre("Drugs", "drugs"),
Genre("Drunk", "drunk"),
Genre("Elf", "elf"),
Genre("Famele Only", "famele-only"),
Genre("Femdom", "femdom"),
Genre("Filming", "filming"),
Genre("Footjob", "footjob"),
Genre("Full Color", "full-color"),
Genre("Furry", "furry"),
Genre("Futanari", "futanari"),
Genre("Glasses", "glasses"),
Genre("Gore", "gore"),
Genre("Group", "group"),
Genre("Gyaru", "gyaru"),
Genre("Harem", "harem"),
Genre("Humiliation", "humiliation"),
Genre("Impregnation", "impregnation"),
Genre("Incest", "incest"),
Genre("Inverted Nipples", "inverted-nipples"),
Genre("Kemomimi", "kemomimi"),
Genre("Lactation", "lactation"),
Genre("Loli", "loli"),
Genre("Lolipai", "lolipai"),
Genre("MILF", "milf"),
Genre("Maid", "maid"),
Genre("Male Only", "male-only"),
Genre("Miko", "miko"),
Genre("Mind Break", "mind-break"),
Genre("Mind Control", "mind-control"),
Genre("Monster", "monster"),
Genre("Monster Girl", "monster-girl"),
Genre("Multi-Work Series", "multi-work-series"),
Genre("Nakadashi", "nakadashi"),
Genre("Netorare", "netorare"),
Genre("Otona (R18)", "otona"),
Genre("Oyakodon", "oyakodon"),
Genre("Paizuri", "paizuri"),
Genre("Pantyhose", "pantyhose"),
Genre("Pregnant", "pregnant"),
Genre("Prostitution", "prostitution"),
Genre("Rape", "rape"),
Genre("School Uniform", "school-uniform"),
Genre("Sex Toy", "sex-toy"),
Genre("Shota", "shota"),
Genre("Sister", "sister"),
Genre("Sleep", "sleep"),
Genre("Slime", "slime"),
Genre("Small Breast", "small-breast"),
Genre("Sole Female", "sole-female"),
Genre("Sole Male", "sole-male"),
Genre("Stocking", "stocking"),
Genre("Story Arc", "story-arc"),
Genre("Sweating", "sweating"),
Genre("Swimsuit", "swimsuit"),
Genre("Teacher", "teacher"),
Genre("Tentacles", "tentacles"),
Genre("Tomboy", "tomboy"),
Genre("Tomgirl", "tomgirl"),
Genre("Torture", "torture"),
Genre("Twins", "twins"),
Genre("Virginity", "virginity"),
Genre("Webtoon", "webtoon"),
Genre("XRay", "xray"),
Genre("Yandere", "yandere"),
Genre("Yaoi", "yaoi"),
Genre("Yuri", "yuri")
)
}

View File

@ -0,0 +1,10 @@
package eu.kanade.tachiyomi.extension.pt.dropescan
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET
import okhttp3.Request
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

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

View File

@ -0,0 +1,10 @@
package eu.kanade.tachiyomi.extension.en.firstkissmanga
import eu.kanade.tachiyomi.multisrc.madara.Madara
import okhttp3.Headers
import java.text.SimpleDateFormat
import java.util.Locale
class FirstKissManga : Madara("1st Kiss", "https://1stkissmanga.com", "en", dateFormat = SimpleDateFormat("dd MMM yyyy", Locale.US)) {
override fun headersBuilder(): Headers.Builder = super.headersBuilder().add("Referer", baseUrl)
}

View File

@ -0,0 +1,12 @@
package eu.kanade.tachiyomi.extension.en.firstkissmanhua
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.Page
import okhttp3.Request
import java.text.SimpleDateFormat
import java.util.Locale
class FirstKissManhua : Madara("1st Kiss Manhua", "https://1stkissmanhua.com", "en", SimpleDateFormat("d MMM yyyy", Locale.US)) {
override fun imageRequest(page: Page): Request = GET(page.imageUrl!!, headersBuilder().add("Referer", "https://1stkissmanga.com").build())
}

View File

@ -0,0 +1,7 @@
package eu.kanade.tachiyomi.extension.pt.furioscans
import eu.kanade.tachiyomi.multisrc.madara.Madara
import java.text.SimpleDateFormat
import java.util.Locale
class FurioScans : Madara("Furio Scans", "https://furioscans.com", "pt-BR", SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()))

View File

@ -0,0 +1,12 @@
package eu.kanade.tachiyomi.extension.ar.goldenmanga
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.FilterList
import java.text.SimpleDateFormat
import java.util.Locale
class GeceninLordu : Madara("Gecenin Lordu", "https://geceninlordu.com/", "tr", SimpleDateFormat("dd MMM yyyy", Locale("tr"))) {
override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = GET("$baseUrl/?s=$query&post_type=wp-manga")
}

View File

@ -0,0 +1,28 @@
package eu.kanade.tachiyomi.extension.ar.goldenmanga
import eu.kanade.tachiyomi.multisrc.madara.Madara
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import org.jsoup.nodes.Element
import java.text.SimpleDateFormat
import java.util.Locale
class GoldenManga : Madara("موقع لترجمة المانجا", "https://golden-manga.com", "ar", SimpleDateFormat("yyyy-MM-dd", Locale.US)) {
override fun searchMangaSelector() = "div.c-image-hover a"
override fun searchMangaFromElement(element: Element): SManga {
return SManga.create().apply {
setUrlWithoutDomain(element.attr("href"))
title = element.attr("title")
thumbnail_url = element.select("img").firstOrNull()?.let { imageFromElement(it) }
}
}
override fun chapterListSelector() = "div.main a"
override fun chapterFromElement(element: Element): SChapter {
return SChapter.create().apply {
setUrlWithoutDomain(element.attr("href"))
name = element.select("h6:first-of-type").text()
date_upload = parseChapterDate(element.select("h6:last-of-type").firstOrNull()?.ownText())
}
}
}

View File

@ -0,0 +1,7 @@
package eu.kanade.tachiyomi.extension.pt.hikariscan
import eu.kanade.tachiyomi.multisrc.madara.Madara
import java.text.SimpleDateFormat
import java.util.Locale
class HikariScan : Madara("Hikari Scan", "https://hikariscan.com.br", "pt-BR", SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("pt", "BR")))

View File

@ -0,0 +1,7 @@
package eu.kanade.tachiyomi.extension.tr.himerafansub
import eu.kanade.tachiyomi.multisrc.madara.Madara
import java.text.SimpleDateFormat
import java.util.Locale
class HimeraFansub : Madara("Himera Fansub", "https://himera-fansub.com", "tr", SimpleDateFormat("dd MMMM yyyy", Locale.forLanguageTag("tr")))

View File

@ -0,0 +1,40 @@
package eu.kanade.tachiyomi.extension.en.hiperdex
import eu.kanade.tachiyomi.multisrc.madara.Madara
class Hiperdex : Madara("Hiperdex", "https://hiperdex.com", "en") {
override fun getGenreList() = listOf(
Genre("Adult", "adult"),
Genre("Action", "action"),
Genre("Adventure", "adventure"),
Genre("Bully", "bully"),
Genre("Comedy", "comedy"),
Genre("Drama", "drama"),
Genre("Ecchi", "ecchi"),
Genre("Fantasy", "fantasy"),
Genre("Gender Bender", "gender-bender"),
Genre("Harem", "harem"),
Genre("Historical", "historical"),
Genre("Horror", "horror"),
Genre("Isekai", "isekai"),
Genre("Josei", "josei"),
Genre("Martial Arts", "martial-arts"),
Genre("Mature", "mature"),
Genre("Mystery", "mystery"),
Genre("Psychological", "psychological"),
Genre("Romance", "romance"),
Genre("School Life", "school-life"),
Genre("Sci-Fi", "sci-fi"),
Genre("Seinen", "seinen"),
Genre("Shoujo", "shoujo"),
Genre("Shounen", "shounen"),
Genre("Slice of Life", "slice-of-life"),
Genre("Smut", "smut"),
Genre("Sports", "sports"),
Genre("Supernatural", "supernatural"),
Genre("Thriller", "thriller"),
Genre("Tragedy", "tragedy"),
Genre("Yaoi", "yaoi"),
Genre("Yuri", "yuri")
)
}