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

View File

@ -5,7 +5,7 @@ ext {
extName = 'Madara (multiple sources)'
pkgNameSuffix = "all.madara"
extClass = '.MadaraFactory'
extVersionCode = 178
extVersionCode = 179
libVersion = '1.2'
containsNsfw = true
}

View File

@ -1,21 +1,16 @@
package eu.kanade.tachiyomi.extension.all.madara
import android.annotation.SuppressLint
import eu.kanade.tachiyomi.annotations.Nsfw
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceFactory
import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.CacheControl
import okhttp3.FormBody
import okhttp3.Headers
import okhttp3.HttpUrl
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
@ -27,59 +22,59 @@ import java.util.concurrent.TimeUnit
class MadaraFactory : SourceFactory {
override fun createSources(): List<Source> = listOf(
AdonisFansub(),
AkuManga(),
AlianzaMarcial(),
AllPornComic(),
Aloalivn(),
AniMangaEs(),
AoCTranslations(),
ApollComics(),
ArangScans(),
ArazNovel(),
ArgosScan(),
AsgardTeam(),
AstralLibrary(),
Atikrost(),
ATMSubs(),
Azora(),
Bakaman(),
BestManga(),
BestManhua(),
BoysLove(),
CatOnHeadTranslations(),
CatTranslator(),
ChibiManga(),
CloverManga(),
ComicKiba(),
ComicsValley(),
CopyPasteScan(),
CutiePie(),
DarkyuRealm(),
DecadenceScans(),
DetectiveConanAr(),
DiamondFansub(),
DisasterScans(),
DoujinHentai(),
DoujinYosh(),
DreamManga(),
DropeScan(),
EinherjarScan(),
FdmScan(),
FirstKissManga(),
FirstKissManhua(),
FreeWebtoonCoins(),
FurioScans(),
GeceninLordu(),
GoldenManga(),
// AdonisFansub(),
// AkuManga(),
// AlianzaMarcial(),
// AllPornComic(),
// Aloalivn(),
// AniMangaEs(),
// AoCTranslations(),
// ApollComics(),
// ArangScans(),
// ArazNovel(),
// ArgosScan(),
// AsgardTeam(),
// AstralLibrary(),
// Atikrost(),
// ATMSubs(),
// Azora(),
// Bakaman(),
// BestManga(),
// BestManhua(),
// BoysLove(),
// CatOnHeadTranslations(),
// CatTranslator(),
// ChibiManga(),
// CloverManga(),
// ComicKiba(),
// ComicsValley(),
// CopyPasteScan(),
// CutiePie(),
// DarkyuRealm(),
// DecadenceScans(),
// DetectiveConanAr(),
// DiamondFansub(),
// DisasterScans(),
// DoujinHentai(),
// DoujinYosh(),
// DreamManga(),
// DropeScan(),
// EinherjarScan(),
// FdmScan(),
// FirstKissManga(),
// FirstKissManhua(),
// FreeWebtoonCoins(),
// FurioScans(),
// GeceninLordu(),
// GoldenManga(),
GrazeScans(),
GourmetScans(),
GuncelManga(),
HeroManhua(),
HerozScanlation(),
HikariScan(),
HimeraFansub(),
Hiperdex(),
// GuncelManga(),
// HeroManhua(),
// HerozScanlation(),
// HikariScan(),
// HimeraFansub(),
// Hiperdex(),
Hscans(),
HunterFansub(),
IchirinNoHanaYuri(),
@ -276,17 +271,10 @@ class SpookyScanlations : Madara("Spooky Scanlations", "https://spookyscanlation
class RandomTranslations : Madara("Random Translations", "https://randomtranslations.com", "en", SimpleDateFormat("dd/MM/yyyy", Locale.US))
class Atikrost : Madara("Atikrost", "https://atikrost.com", "tr", SimpleDateFormat("MMMM dd, yyyy", Locale("tr"))) {
override val chapterUrlSelector = "a:not(:has(img))"
override val chapterDatesNewSelector = "img:not(.thumb)"
}
class ManhuaFast : Madara("ManhuaFast", "https://manhuafast.com", "en") {
override val pageListParseSelector = "li.blocks-gallery-item"
}
class BestManhua : Madara("BestManhua", "https://bestmanhua.com", "en")
class ManhuaSY : Madara("Manhua SY", "https://www.manhuasy.com", "en")
class MangaRave : Madara("MangaRave", "http://www.mangarave.com", "en")
@ -297,10 +285,6 @@ class Manga3S : Madara("Manga3S", "https://manga3s.com", "en")
class MGKomik : Madara("MG Komik", "https://mgkomik.my.id", "id")
class Aloalivn : Madara("Aloalivn", "https://aloalivn.com", "en") {
override val pageListParseSelector = "li.blocks-gallery-item"
}
class MangaSco : Madara("MangaSco", "https://mangasco.com", "en")
class MangaCrimson : Madara("Manga Crimson", "https://mangacrimson.com", "tr", SimpleDateFormat("dd MMMM yyyy", Locale("tr")))
@ -311,12 +295,8 @@ class NekoBreaker : Madara("NekoBreaker", "https://nekobreaker.com", "pt-BR", Si
class ManganeloLink : Madara("Manganelo.link", "https://manganelo.link", "en")
class ApollComics : Madara("ApollComics", "https://apollcomics.xyz", "es", SimpleDateFormat("dd MMMM, yyyy", Locale("es")))
class KisekiManga : Madara("KisekiManga", "https://kisekimanga.com", "en")
class FreeWebtoonCoins : Madara("FreeWebtoonCoins", "https://freewebtooncoins.com", "en")
class MangaRoma : Madara("MangaRoma", "https://mangaroma.com", "en")
class NTSVoidScans : Madara("NTS Void Scans", "https://ntsvoidscans.com", "en")
@ -329,26 +309,16 @@ class WebToonily : Madara("WebToonily", "https://webtoonily.com", "en")
class Manga18Fun : Madara("Manga18 Fun", "https://manga18.fun", "en")
class CutiePie : Madara("Cutie Pie", "https://cutiepie.ga", "tr", SimpleDateFormat("dd MMMM yyyy", Locale.forLanguageTag("tr")))
class DiamondFansub : Madara("DiamondFansub", "https://diamondfansub.com", "tr", SimpleDateFormat("MMMM dd, yyyy", Locale.forLanguageTag("tr")))
class MangaYaku : Madara("MangaYaku", "https://mangayaku.my.id", "id")
class RuyaManga : Madara("Rüya Manga", "https://www.ruyamanga.com", "tr", SimpleDateFormat("dd MMMM yyyy", Locale.forLanguageTag("tr")))
class HimeraFansub : Madara("Himera Fansub", "https://himera-fansub.com", "tr", SimpleDateFormat("dd MMMM yyyy", Locale.forLanguageTag("tr")))
class MangaBaz : Madara("MangaBaz", "https://mangabaz.com", "tr", SimpleDateFormat("dd MMMM yyyy", Locale.forLanguageTag("tr")))
class Manhuaga : Madara("Manhuaga", "https://manhuaga.com", "en")
class MangaCultivator : Madara("MangaCultivator", "https://mangacultivator.com", "en")
class HerozScanlation : Madara("Heroz Scanlation", "https://herozscans.com", "en")
class CatOnHeadTranslations : Madara("CatOnHeadTranslations", "https://catonhead.com", "en")
class OffScan : Madara(
"Off Scan",
"https://offscan.top",
@ -387,41 +357,6 @@ class JustForFun : Madara(
dateFormat = SimpleDateFormat("yy.MM.dd", Locale.US)
)
class AoCTranslations : 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()
}
}
}
}
class KomikGo : Madara("KomikGo", "https://komikgo.com", "id")
class TsubakiNoScan : Madara(
@ -450,15 +385,6 @@ class MangazukiClubJP : Madara("Mangazuki.club", "https://mangazuki.club", "ja")
class MangazukiClubKO : Madara("Mangazuki.club", "https://mangazuki.club", "ko")
class FirstKissManga : Madara(
"1st Kiss",
"https://1stkissmanga.com",
"en",
SimpleDateFormat("MMM d, yyyy", Locale.US)
) {
override fun headersBuilder(): Headers.Builder = super.headersBuilder().add("Referer", baseUrl)
}
class MangaSY : Madara("Manga SY", "https://www.mangasy.com", "en") {
override fun imageRequest(page: Page): Request = super.imageRequest(page).newBuilder()
.cacheControl(CacheControl.FORCE_NETWORK)
@ -480,13 +406,6 @@ class ManyToonMe : Madara("ManyToon.me", "https://manytoon.me", "en")
class BoysLove : Madara("BoysLove", "https://boyslove.me", "en")
class ChibiManga : Madara(
"Chibi Manga",
"https://www.cmreader.info",
"en",
dateFormat = SimpleDateFormat("MMM dd, yyyy", Locale.US)
)
class ZinManga : Madara("Zin Translator", "https://zinmanga.com", "en") {
override fun headersBuilder(): Headers.Builder = super.headersBuilder()
.add("Referer", "https://zinmanga.com/")
@ -496,306 +415,12 @@ class ManwahentaiMe : Madara("Manwahentai.me", "https://manhwahentai.me", "en")
class Manga3asq : Madara("مانجا العاشق", "https://3asq.org", "ar")
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)
}
@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")
)
}
class Milftoon : Madara("Milftoon", "https://milftoon.xxx", "en") {
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/page/$page/?m_orderby=views", headers)
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/page/$page/?m_orderby=latest", headers)
}
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")
)
}
@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")
)
)
}
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
}
}
class KMangaIn : Madara("Kissmanga.in", "https://kissmanga.in", "en")
class HunterFansub : Madara("Hunter Fansub", "https://hunterfansub.com", "es") {
@ -880,26 +505,6 @@ class YaoiToshokan : Madara("Yaoi Toshokan", "https://yaoitoshokan.com.br", "pt-
}
}
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())
}
}
}
class Mangalek : Madara("مانجا ليك", "https://mangalek.com", "ar", SimpleDateFormat("MMMM dd, yyyy", Locale("ar")))
class AstralLibrary : Madara("Astral Library", "https://www.astrallibrary.net", "en", SimpleDateFormat("d MMM", Locale.US)) {
@ -920,8 +525,6 @@ class Manhuasnet : Madara("Manhuas.net", "https://manhuas.net", "en")
class MangaTX : Madara("MangaTX", "https://mangatx.com", "en")
class ATMSubs : Madara("ATM-Subs", "https://atm-subs.fr", "fr", SimpleDateFormat("d MMMM yyyy", Locale("fr")))
class OnManga : Madara("OnManga", "https://onmanga.com", "en")
class MangaAction : Madara("Manga Action", "https://manga-action.com", "ar", SimpleDateFormat("yyyy-MM-dd", Locale("ar")))
@ -939,22 +542,6 @@ class ThreeSixtyFiveManga : Madara("365Manga", "https://365manga.com", "en") {
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/manga/page/$page/?m_orderby=latest", headers)
}
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
}
}
class MangaDods : Madara("MangaDods", "https://www.mangadods.com", "en", SimpleDateFormat("yyyy-MM-dd", Locale.US))
class NeoxScanlator : Madara(
@ -1015,8 +602,6 @@ class ManhuaUS : Madara("ManhuaUS", "https://manhuaus.com", "en") {
class MangaWT : Madara("MangaWT", "https://mangawt.com", "tr")
class DecadenceScans : Madara("Decadence Scans", "https://reader.decadencescans.com", "en")
class MangaRockTeam : Madara("Manga Rock Team", "https://mangarockteam.com", "en")
class MixedManga : Madara("Mixed Manga", "https://mixedmanga.com", "en", SimpleDateFormat("d MMM yyyy", Locale.US)) {
@ -1025,75 +610,8 @@ class MixedManga : Madara("Mixed Manga", "https://mixedmanga.com", "en", SimpleD
class ManhuasWorld : Madara("Manhuas World", "https://manhuasworld.com", "en")
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) }
}
}
}
}
}
class ManhwaRaw : Madara("Manhwa Raw", "https://manhwaraw.com", "ko")
class GuncelManga : Madara("GuncelManga", "https://guncelmanga.com", "tr")
class WeScans : Madara("WeScans", "https://wescans.xyz", "en") {
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manhua/manga/?m_orderby=views", headers)
override fun popularMangaNextPageSelector(): String? = null
@ -1103,15 +621,6 @@ class WeScans : Madara("WeScans", "https://wescans.xyz", "en") {
override fun getFilterList(): FilterList = FilterList()
}
class ArangScans : Madara("Arang Scans", "https://arangscans.com", "en", SimpleDateFormat("d MMM yyyy", Locale.US)) {
override val userAgentRandomizer = ""
// 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
}
@Nsfw
class MangaHentai : Madara("Manga Hentai", "https://mangahentai.me", "en")
@ -1120,12 +629,6 @@ class MangaPhoenix : Madara("Manga Diyari", "https://mangadiyari.com", "tr") {
override val id = 4308007020001642101
}
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())
}
class HeroManhua : Madara("Hero Manhua", "https://heromanhua.com", "en")
class MartialScans : Madara("Martial Scans", "https://martialscans.com", "en") {
override fun popularMangaFromElement(element: Element): SManga {
val manga = SManga.create()
@ -1166,101 +669,6 @@ class TurkceManga : Madara("Türkçe Manga", "https://turkcemanga.com", "tr") {
override fun latestUpdatesFromElement(element: Element): SManga = searchMangaFromElement(element)
}
class EinherjarScan : Madara("Einherjar Scan", "https://einherjarscans.space", "en")
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")
)
}
class Manga347 : Madara("Manga347", "https://manga347.com", "en", SimpleDateFormat("d MMM, yyyy", Locale.US)) {
override val pageListParseSelector = "li.blocks-gallery-item"
}
@ -1271,11 +679,6 @@ class QueensManga : Madara("QueensManga ملكات المانجا", "https://que
override fun chapterListSelector(): String = "div.listing-chapters_wrap a"
}
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)
}
class TheTopComic : Madara("TheTopComic", "https://thetopcomic.com", "en")
class WebNovel : Madara("WebNovel", "https://webnovel.live", "en")
@ -1310,14 +713,8 @@ class TruyenTranhAudioOnline : Madara("TruyenTranhAudio.online", "https://truyen
class MangaTurf : Madara("Manga Turf", "https://mangaturf.com", "en")
class FurioScans : Madara("Furio Scans", "https://furioscans.com", "pt-BR", SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()))
class Mangareceh : Madara("Mangareceh", "https://mangareceh.id", "id")
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"
}
class ToonPoint : Madara("ToonPoint", "https://toonpoint.com", "en") {
override val userAgentRandomizer = ""
}
@ -1328,19 +725,12 @@ class ManhuaPlus : Madara("Manhua Plus", "https://manhuaplus.com", "en") {
override val pageListParseSelector = "li.blocks-gallery-item"
}
class AkuManga : Madara("AkuManga", "https://akumanga.com", "ar")
class AsgardTeam : Madara("Asgard Team", "https://www.asgard1team.com", "ar")
@Nsfw
class ToonilyNet : Madara("Toonily.net", "https://toonily.net", "en")
class BestManga : Madara("BestManga", "https://bestmanga.club", "ru", SimpleDateFormat("dd.MM.yyyy", Locale.getDefault()))
class TwilightScans : Madara("Twilight Scans", "https://twilightscans.com", "en")
class DetectiveConanAr : Madara("شبكة كونان العربية", "https://www.manga.detectiveconanar.com", "ar")
// mostly novels
class WoopRead : Madara("WoopRead", "https://woopread.com", "en")
@ -1350,21 +740,6 @@ class ManhwaTop : Madara("Manhwatop", "https://manhwatop.com", "en")
class ImmortalUpdates : Madara("Immortal Updates", "https://immortalupdates.com", "en")
class Bakaman : Madara("Bakaman", "https://bakaman.net", "th")
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/"
}
@Nsfw
class ComicsValley : Madara("Comics Valley", "https://comicsvalley.com", "hi")
class Wakascan : Madara("Wakascan", "https://wakascan.com", "fr")
class ShoujoHearts : Madara("ShoujoHearts", "http://shoujohearts.com", "en") {
@ -1377,18 +752,10 @@ class ShoujoHearts : Madara("ShoujoHearts", "http://shoujohearts.com", "en") {
override fun searchPage(page: Int): String = "reader/page/$page/"
}
class AlianzaMarcial : Madara("AlianzaMarcial", "https://alianzamarcial.xyz", "es")
class OlaoeManga : Madara("مانجا اولاو", "https://olaoe.giize.com", "ar")
class FdmScan : Madara("FDM Scan", "https://fdmscan.com", "pt-BR", SimpleDateFormat("MMMM dd, yyyy", Locale("pt", "BR")))
class ArgosScan : Madara("Argos Scan", "https://argosscan.com", "pt-BR", SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("pt", "BR")))
class OrigamiOrpheans : Madara("Origami Orpheans", "https://origami-orpheans.com.br", "pt-BR")
class DarkyuRealm : Madara("Darkyu Realm", "https://darkyuerealm.site", "pt-BR")
class MangaKiss : Madara("Manga Kiss", "https://mangakiss.org", "en")
class MangaRocky : Madara("Manga Rocky", "https://mangarocky.com", "en")
@ -1403,8 +770,6 @@ class Kombatch : Madara("Kombatch", "https://kombatch.com", "id", SimpleDateForm
class ProjetoScanlator : Madara("Projeto Scanlator", "https://projetoscanlator.com", "pt-BR", SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR")))
class HikariScan : Madara("Hikari Scan", "https://hikariscan.com.br", "pt-BR", SimpleDateFormat("dd 'de' MMMM 'de' yyyy", Locale("pt", "BR")))
class NazarickScans : Madara("Nazarick Scans", "https://nazarickscans.com", "en") {
override fun popularMangaRequest(page: Int) = GET("$baseUrl/manga/page/$page/?m_orderby=trending", headers)
override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/manga/page/$page/?m_orderby=trending", headers)
@ -1455,12 +820,6 @@ class MysticalMerries : Madara("Mystical Merries", "https://mysticalmerries.com"
override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/genre/manhwa/page/$page/?m_orderby=latest", headers)
}
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()
}
class MangaNine : Madara("Manga Nine", "https://manganine.com", "en")
class MarkScans : Madara("Mark Scans", "https://markscans.online", "pt-BR")
@ -1505,10 +864,6 @@ class Voidscans : Madara("Void Scans", "https://voidscans.com", "en") {
override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = GET("$baseUrl/?s=$query&post_type=wp-manga")
}
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")
}
class GrazeScans : Madara("Graze Scans", "https://grazescans.com/", "en")
class UyuyanBalik : Madara("Uyuyan Balik", "https://uyuyanbalik.com/", "tr", SimpleDateFormat("dd MMMM yyyy", Locale.US))
@ -1527,16 +882,12 @@ class MundoWuxia : Madara("Mundo Wuxia", "https://mundowuxia.com", "es", SimpleD
class WorldRomanceTranslation : Madara("World Romance Translation", "https://wrt.my.id/", "id", SimpleDateFormat("dd MMMM yyyy", Locale("id")))
class CloverManga : Madara("Clover Manga", "https://clover-manga.com/", "tr", SimpleDateFormat("MMMM dd, yyyy", Locale("tr")))
class VanguardBun : Madara("Vanguard Bun", "https://vanguardbun.com/", "en")
class MangaBin : Madara("Manga Bin", "https://mangabin.com/", "en")
class MangaChill : Madara("Manga Chill", "https://mangachill.com/", "en")
class DreamManga : Madara("Dream Manga", "https://dreammanga.com/", "en")
class GourmetScans : Madara("Gourmet Scans", "https://gourmetscans.net/", "en")
class ItsYourRightManhua : Madara("Its Your Right Manhua", "https://itsyourightmanhua.com/", "en")