parent
03ee1ea829
commit
6b6ad793ac
|
@ -2,10 +2,10 @@ apply plugin: 'com.android.application'
|
||||||
apply plugin: 'kotlin-android'
|
apply plugin: 'kotlin-android'
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
appName = 'Tachiyomi: MangaMx'
|
appName = 'Tachiyomi: MangaMx & Doujin-Yang'
|
||||||
pkgNameSuffix = 'es.mangamx'
|
pkgNameSuffix = 'es.mangamx'
|
||||||
extClass = '.MangaMx'
|
extClass = '.MangaMxFactory'
|
||||||
extVersionCode = 3
|
extVersionCode = 4
|
||||||
libVersion = '1.2'
|
libVersion = '1.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,9 @@ import okhttp3.Response
|
||||||
import org.jsoup.nodes.Document
|
import org.jsoup.nodes.Document
|
||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.Locale
|
||||||
|
|
||||||
class MangaMx : ParsedHttpSource() {
|
open class MangaMx : ParsedHttpSource() {
|
||||||
|
|
||||||
override val name = "MangaMx"
|
override val name = "MangaMx"
|
||||||
override val baseUrl = "https://manga-mx.com"
|
override val baseUrl = "https://manga-mx.com"
|
||||||
|
@ -173,7 +173,7 @@ class MangaMx : ParsedHttpSource() {
|
||||||
SortFilter()
|
SortFilter()
|
||||||
)
|
)
|
||||||
|
|
||||||
private class GenreFilter : UriPartFilter("Género", "genero", arrayOf(
|
class GenreFilter : UriPartFilter("Género", "genero", arrayOf(
|
||||||
Pair("all","All"),
|
Pair("all","All"),
|
||||||
Pair("3","Acción"),
|
Pair("3","Acción"),
|
||||||
Pair("35","Artes Marciales"),
|
Pair("35","Artes Marciales"),
|
||||||
|
@ -214,7 +214,7 @@ class MangaMx : ParsedHttpSource() {
|
||||||
Pair("16","Yuri")
|
Pair("16","Yuri")
|
||||||
))
|
))
|
||||||
|
|
||||||
private class LetterFilter : UriPartFilter("Letra","letra", arrayOf(
|
class LetterFilter : UriPartFilter("Letra","letra", arrayOf(
|
||||||
Pair("all","All"),
|
Pair("all","All"),
|
||||||
Pair("a","A"),
|
Pair("a","A"),
|
||||||
Pair("b","B"),
|
Pair("b","B"),
|
||||||
|
@ -244,7 +244,7 @@ class MangaMx : ParsedHttpSource() {
|
||||||
Pair("z","Z")
|
Pair("z","Z")
|
||||||
))
|
))
|
||||||
|
|
||||||
private class StatusFilter : UriPartFilter("Estado", "estado", arrayOf(
|
class StatusFilter : UriPartFilter("Estado", "estado", arrayOf(
|
||||||
Pair("all","All"),Pair("1","En desarrollo"), Pair("0","Finalizado")))
|
Pair("all","All"),Pair("1","En desarrollo"), Pair("0","Finalizado")))
|
||||||
|
|
||||||
private class TypeFilter : UriPartFilter("Tipo", "tipo", arrayOf(
|
private class TypeFilter : UriPartFilter("Tipo", "tipo", arrayOf(
|
||||||
|
@ -259,7 +259,7 @@ class MangaMx : ParsedHttpSource() {
|
||||||
private class AdultFilter : UriPartFilter("Filtro adulto", "adulto", arrayOf(
|
private class AdultFilter : UriPartFilter("Filtro adulto", "adulto", arrayOf(
|
||||||
Pair("all","All"),Pair("0","Mostrar solo +18"), Pair("1","No mostrar +18")))
|
Pair("all","All"),Pair("0","Mostrar solo +18"), Pair("1","No mostrar +18")))
|
||||||
|
|
||||||
private class SortFilter : UriPartFilterreq("Sort", "orden", arrayOf(
|
class SortFilter : UriPartFilterreq("Sort", "orden", arrayOf(
|
||||||
Pair("visitas","Visitas"),
|
Pair("visitas","Visitas"),
|
||||||
Pair("desc","Descendente"),
|
Pair("desc","Descendente"),
|
||||||
Pair("asc","Ascendente"),
|
Pair("asc","Ascendente"),
|
||||||
|
@ -273,8 +273,8 @@ class MangaMx : ParsedHttpSource() {
|
||||||
* If `firstIsUnspecified` is set to true, if the first entry is selected, nothing will be appended on the the URI.
|
* If `firstIsUnspecified` is set to true, if the first entry is selected, nothing will be appended on the the URI.
|
||||||
*/
|
*/
|
||||||
//vals: <name, display>
|
//vals: <name, display>
|
||||||
private open class UriPartFilter(displayName: String, val uriParam: String, val vals: Array<Pair<String, String>>,
|
open class UriPartFilter(displayName: String, private val uriParam: String, private val vals: Array<Pair<String, String>>,
|
||||||
val firstIsUnspecified: Boolean = true,
|
private val firstIsUnspecified: Boolean = true,
|
||||||
defaultValue: Int = 0) :
|
defaultValue: Int = 0) :
|
||||||
Filter.Select<String>(displayName, vals.map { it.second }.toTypedArray(), defaultValue), UriFilter {
|
Filter.Select<String>(displayName, vals.map { it.second }.toTypedArray(), defaultValue), UriFilter {
|
||||||
override fun addToUri(uri: Uri.Builder) {
|
override fun addToUri(uri: Uri.Builder) {
|
||||||
|
@ -283,7 +283,7 @@ class MangaMx : ParsedHttpSource() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private open class UriPartFilterreq(displayName: String, val uriParam: String, val vals: Array<Pair<String, String>>) :
|
open class UriPartFilterreq(displayName: String, private val uriParam: String, private val vals: Array<Pair<String, String>>) :
|
||||||
Filter.Select<String>(displayName, vals.map { it.second }.toTypedArray()), UriFilter {
|
Filter.Select<String>(displayName, vals.map { it.second }.toTypedArray()), UriFilter {
|
||||||
override fun addToUri(uri: Uri.Builder) {
|
override fun addToUri(uri: Uri.Builder) {
|
||||||
uri.appendQueryParameter(uriParam, vals[state].first)
|
uri.appendQueryParameter(uriParam, vals[state].first)
|
||||||
|
|
|
@ -0,0 +1,156 @@
|
||||||
|
package eu.kanade.tachiyomi.extension.es.mangamx
|
||||||
|
|
||||||
|
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.*
|
||||||
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
|
import okhttp3.Request
|
||||||
|
import okhttp3.RequestBody
|
||||||
|
import okhttp3.Response
|
||||||
|
|
||||||
|
class MangaMxFactory : SourceFactory {
|
||||||
|
override fun createSources(): List<Source> = listOf(
|
||||||
|
MangaMx(),
|
||||||
|
DoujinYang()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
class DoujinYang: MangaMx() {
|
||||||
|
override val baseUrl = "https://doujin-yang.es"
|
||||||
|
|
||||||
|
override val name = "Doujin-Yang"
|
||||||
|
|
||||||
|
override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/reciente/doujin?p=$page", headers)
|
||||||
|
|
||||||
|
override fun latestUpdatesSelector() = popularMangaSelector()
|
||||||
|
|
||||||
|
override fun latestUpdatesNextPageSelector() = "nav#paginacion a:contains(Última)"
|
||||||
|
|
||||||
|
override fun searchMangaNextPageSelector() = latestUpdatesNextPageSelector()
|
||||||
|
|
||||||
|
override fun chapterListRequest(manga: SManga): Request {
|
||||||
|
return GET(baseUrl + manga.url, headers)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun chapterListParse(response: Response): List<SChapter> {
|
||||||
|
return response.asJsoup().select("div#c_list a").map { element ->
|
||||||
|
SChapter.create().apply {
|
||||||
|
name = element.select("h3").text()
|
||||||
|
setUrlWithoutDomain(element.attr("abs:href"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun pageListRequest(chapter: SChapter): Request {
|
||||||
|
return POST(baseUrl + chapter.url,
|
||||||
|
headersBuilder().add("Content-Type", "application/x-www-form-urlencoded").build(),
|
||||||
|
RequestBody.create(null, "info")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun pageListParse(response: Response): List<Page> {
|
||||||
|
return response.body()!!.string().substringAfter(",[").substringBefore("]")
|
||||||
|
.replace(Regex("""[\\"]"""), "").split(",").let { list ->
|
||||||
|
val path = "http:" + list[0]
|
||||||
|
list.drop(1).mapIndexed { i, img -> Page(i, "", path + img) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getFilterList() = FilterList(
|
||||||
|
Filter.Header("NOTA: ¡La búsqueda de títulos no funciona!"), // "Title search not working"
|
||||||
|
Filter.Separator(),
|
||||||
|
GenreFilter(),
|
||||||
|
LetterFilter(),
|
||||||
|
StatusFilter(),
|
||||||
|
SortFilter()
|
||||||
|
)
|
||||||
|
|
||||||
|
class GenreFilter : UriPartFilter("Género", "genero", arrayOf(
|
||||||
|
Pair("all","All"),
|
||||||
|
Pair("1","Ahegao"),
|
||||||
|
Pair("379","Alien"),
|
||||||
|
Pair("2","Anal"),
|
||||||
|
Pair("490","Android18"),
|
||||||
|
Pair("717","Angel"),
|
||||||
|
Pair("633","Asphyxiation"),
|
||||||
|
Pair("237","Bandages"),
|
||||||
|
Pair("77","Bbw"),
|
||||||
|
Pair("143","Bdsm"),
|
||||||
|
Pair("23","Blackmail"),
|
||||||
|
Pair("113","Blindfold"),
|
||||||
|
Pair("24","Blowjob"),
|
||||||
|
Pair("166","Blowjobface"),
|
||||||
|
Pair("25","Body Writing"),
|
||||||
|
Pair("314","Bodymodification"),
|
||||||
|
Pair("806","Bodystocking"),
|
||||||
|
Pair("366","Bodysuit"),
|
||||||
|
Pair("419","Bodyswap"),
|
||||||
|
Pair("325","Bodywriting"),
|
||||||
|
Pair("5","Bondage"),
|
||||||
|
Pair("51","Bukkake"),
|
||||||
|
Pair("410","Catgirl"),
|
||||||
|
Pair("61","Chastitybelt"),
|
||||||
|
Pair("78","Cheating"),
|
||||||
|
Pair("293","Cheerleader"),
|
||||||
|
Pair("62","Collar"),
|
||||||
|
Pair("120","Compilation"),
|
||||||
|
Pair("74","Condom"),
|
||||||
|
Pair("63","Corruption"),
|
||||||
|
Pair("191","Corset"),
|
||||||
|
Pair("234","Cosplaying"),
|
||||||
|
Pair("389","Cowgirl"),
|
||||||
|
Pair("256","Crossdressing"),
|
||||||
|
Pair("179","Crotchtattoo"),
|
||||||
|
Pair("689","Crown"),
|
||||||
|
Pair("733","Cumflation"),
|
||||||
|
Pair("385","Cumswap"),
|
||||||
|
Pair("251","Cunnilingus"),
|
||||||
|
Pair("75","Darkskin"),
|
||||||
|
Pair("180","Daughter"),
|
||||||
|
Pair("52","Deepthroat"),
|
||||||
|
Pair("28","Defloration"),
|
||||||
|
Pair("198","Demon"),
|
||||||
|
Pair("145","Demongirl"),
|
||||||
|
Pair("64","Drugs"),
|
||||||
|
Pair("95","Drunk"),
|
||||||
|
Pair("462","Femalesonly"),
|
||||||
|
Pair("82","Femdom"),
|
||||||
|
Pair("139","Ffmthreesome"),
|
||||||
|
Pair("823","Fftthreesome"),
|
||||||
|
Pair("55","Full Color"),
|
||||||
|
Pair("181","Fullbodytattoo"),
|
||||||
|
Pair("203","Fullcensorship"),
|
||||||
|
Pair("111","Fullcolor"),
|
||||||
|
Pair("114","Gag"),
|
||||||
|
Pair("3","Glasses"),
|
||||||
|
Pair("515","Gloryhole"),
|
||||||
|
Pair("116","Humanpet"),
|
||||||
|
Pair("32","Humiliation"),
|
||||||
|
Pair("147","Latex"),
|
||||||
|
Pair("12","Maid"),
|
||||||
|
Pair("4","Milf"),
|
||||||
|
Pair("245","Military"),
|
||||||
|
Pair("414","Milking"),
|
||||||
|
Pair("34","Mind Control"),
|
||||||
|
Pair("68","Mindbreak"),
|
||||||
|
Pair("124","Mindcontrol"),
|
||||||
|
Pair("645","Nun"),
|
||||||
|
Pair("312","Nurse"),
|
||||||
|
Pair("272","Robot"),
|
||||||
|
Pair("7","Romance"),
|
||||||
|
Pair("761","Sundress"),
|
||||||
|
Pair("412","Tailplug"),
|
||||||
|
Pair("253","Tutor"),
|
||||||
|
Pair("259","Twins"),
|
||||||
|
Pair("207","Twintails"),
|
||||||
|
Pair("840","Valkyrie"),
|
||||||
|
Pair("530","Vampire"),
|
||||||
|
Pair("16","Yuri"),
|
||||||
|
Pair("273","Zombie")
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue