MangaMx - add Doujin-Yang (#1857)

MangaMx - add Doujin-Yang
This commit is contained in:
Mike 2019-12-06 08:11:07 -05:00 committed by arkon
parent 03ee1ea829
commit 6b6ad793ac
3 changed files with 169 additions and 13 deletions

View File

@ -2,10 +2,10 @@ apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
ext {
appName = 'Tachiyomi: MangaMx'
appName = 'Tachiyomi: MangaMx & Doujin-Yang'
pkgNameSuffix = 'es.mangamx'
extClass = '.MangaMx'
extVersionCode = 3
extClass = '.MangaMxFactory'
extVersionCode = 4
libVersion = '1.2'
}

View File

@ -17,9 +17,9 @@ import okhttp3.Response
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import java.text.SimpleDateFormat
import java.util.*
import java.util.Locale
class MangaMx : ParsedHttpSource() {
open class MangaMx : ParsedHttpSource() {
override val name = "MangaMx"
override val baseUrl = "https://manga-mx.com"
@ -173,7 +173,7 @@ class MangaMx : ParsedHttpSource() {
SortFilter()
)
private class GenreFilter : UriPartFilter("Género", "genero", arrayOf(
class GenreFilter : UriPartFilter("Género", "genero", arrayOf(
Pair("all","All"),
Pair("3","Acción"),
Pair("35","Artes Marciales"),
@ -214,7 +214,7 @@ class MangaMx : ParsedHttpSource() {
Pair("16","Yuri")
))
private class LetterFilter : UriPartFilter("Letra","letra", arrayOf(
class LetterFilter : UriPartFilter("Letra","letra", arrayOf(
Pair("all","All"),
Pair("a","A"),
Pair("b","B"),
@ -244,7 +244,7 @@ class MangaMx : ParsedHttpSource() {
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")))
private class TypeFilter : UriPartFilter("Tipo", "tipo", arrayOf(
@ -259,7 +259,7 @@ class MangaMx : ParsedHttpSource() {
private class AdultFilter : UriPartFilter("Filtro adulto", "adulto", arrayOf(
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("desc","Descendente"),
Pair("asc","Ascendente"),
@ -273,9 +273,9 @@ class MangaMx : ParsedHttpSource() {
* If `firstIsUnspecified` is set to true, if the first entry is selected, nothing will be appended on the the URI.
*/
//vals: <name, display>
private open class UriPartFilter(displayName: String, val uriParam: String, val vals: Array<Pair<String, String>>,
val firstIsUnspecified: Boolean = true,
defaultValue: Int = 0) :
open class UriPartFilter(displayName: String, private val uriParam: String, private val vals: Array<Pair<String, String>>,
private val firstIsUnspecified: Boolean = true,
defaultValue: Int = 0) :
Filter.Select<String>(displayName, vals.map { it.second }.toTypedArray(), defaultValue), UriFilter {
override fun addToUri(uri: Uri.Builder) {
if (state != 0 || !firstIsUnspecified)
@ -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 {
override fun addToUri(uri: Uri.Builder) {
uri.appendQueryParameter(uriParam, vals[state].first)

View File

@ -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")
))
}