From aa5804b858a6e656b863dcab8c0e92a9998b80b3 Mon Sep 17 00:00:00 2001 From: bapeey <90949336+bapeey@users.noreply.github.com> Date: Thu, 28 Nov 2024 08:40:04 -0500 Subject: [PATCH] VCPVMP: Move to multisrc and add ChoChoX (#6356) * move to multisrc and add chochox * lint * apply suggestions --- lib-multisrc/vercomics/build.gradle.kts | 5 + .../tachiyomi/multisrc/vercomics/VerComics.kt | 161 +++++++++++------- src/es/chochox/build.gradle | 9 + .../chochox/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4305 bytes .../chochox/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2408 bytes .../chochox/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6120 bytes .../chochox/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11585 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 16918 bytes .../tachiyomi/extension/es/chochox/Chochox.kt | 35 ++++ src/es/vcpvmp/build.gradle | 3 +- .../extension/es/vcpvmp/VCPVMPFactory.kt | 61 +++---- 11 files changed, 175 insertions(+), 99 deletions(-) create mode 100644 lib-multisrc/vercomics/build.gradle.kts rename src/es/vcpvmp/src/eu/kanade/tachiyomi/extension/es/vcpvmp/VCPVMP.kt => lib-multisrc/vercomics/src/eu/kanade/tachiyomi/multisrc/vercomics/VerComics.kt (69%) create mode 100644 src/es/chochox/build.gradle create mode 100644 src/es/chochox/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/chochox/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/chochox/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/chochox/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/chochox/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/chochox/src/eu/kanade/tachiyomi/extension/es/chochox/Chochox.kt diff --git a/lib-multisrc/vercomics/build.gradle.kts b/lib-multisrc/vercomics/build.gradle.kts new file mode 100644 index 000000000..dc076cc37 --- /dev/null +++ b/lib-multisrc/vercomics/build.gradle.kts @@ -0,0 +1,5 @@ +plugins { + id("lib-multisrc") +} + +baseVersionCode = 1 diff --git a/src/es/vcpvmp/src/eu/kanade/tachiyomi/extension/es/vcpvmp/VCPVMP.kt b/lib-multisrc/vercomics/src/eu/kanade/tachiyomi/multisrc/vercomics/VerComics.kt similarity index 69% rename from src/es/vcpvmp/src/eu/kanade/tachiyomi/extension/es/vcpvmp/VCPVMP.kt rename to lib-multisrc/vercomics/src/eu/kanade/tachiyomi/multisrc/vercomics/VerComics.kt index 5c805faf6..afc1a9c3d 100644 --- a/src/es/vcpvmp/src/eu/kanade/tachiyomi/extension/es/vcpvmp/VCPVMP.kt +++ b/lib-multisrc/vercomics/src/eu/kanade/tachiyomi/multisrc/vercomics/VerComics.kt @@ -1,4 +1,4 @@ -package eu.kanade.tachiyomi.extension.es.vcpvmp +package eu.kanade.tachiyomi.multisrc.vercomics import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.model.Filter @@ -8,45 +8,79 @@ import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.UpdateStrategy import eu.kanade.tachiyomi.source.online.ParsedHttpSource -import okhttp3.Headers import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.Request import org.jsoup.nodes.Document import org.jsoup.nodes.Element import rx.Observable -open class VCPVMP(override val name: String, override val baseUrl: String) : ParsedHttpSource() { - - override val lang = "es" +abstract class VerComics( + override val name: String, + override val baseUrl: String, + override val lang: String, +) : ParsedHttpSource() { override val supportsLatest: Boolean = false - override fun headersBuilder(): Headers.Builder { - return Headers.Builder() - .add("Referer", "$baseUrl/") - } + protected open val urlSuffix = "" + protected open val genreSuffix = "" + protected open val useSuffixOnSearch = true - override fun latestUpdatesRequest(page: Int) = throw UnsupportedOperationException() - - override fun latestUpdatesSelector() = throw UnsupportedOperationException() - - override fun latestUpdatesFromElement(element: Element) = throw UnsupportedOperationException() - - override fun latestUpdatesNextPageSelector() = throw UnsupportedOperationException() + override fun headersBuilder() = super.headersBuilder() + .add("Referer", "$baseUrl/") override fun popularMangaRequest(page: Int) = GET("$baseUrl/$urlSuffix/page/$page", headers) - override fun popularMangaSelector() = "div.blog-list-items > div.entry" + override fun popularMangaSelector() = "header:has(h1) ~ * .entry" + + override fun popularMangaNextPageSelector() = "div.wp-pagenavi > span.current + a" override fun popularMangaFromElement(element: Element) = SManga.create().apply { element.select("a.popimg").first()!!.let { setUrlWithoutDomain(it.attr("href")) title = it.select("img").attr("alt") - thumbnail_url = it.select("img:not(noscript img)").attr("abs:data-src") + thumbnail_url = it.selectFirst("img:not(noscript img)")?.imgAttr() } } - override fun popularMangaNextPageSelector() = "div.wp-pagenavi > span.current + a" + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + var url = baseUrl.toHttpUrl().newBuilder() + + if (query.isNotBlank()) { + url = baseUrl.toHttpUrl().newBuilder() + if (useSuffixOnSearch) { + url.addPathSegments(urlSuffix) + } + url.addPathSegments("page") + url.addPathSegments(page.toString()) + url.addQueryParameter("s", query) + + return GET(url.build(), headers) + } + + filters.forEach { filter -> + when (filter) { + is Genre -> { + if (filter.toUriPart().isNotEmpty()) { + url.addPathSegments(genreSuffix) + url.addPathSegments(filter.toUriPart()) + + url.addPathSegments("page") + url.addPathSegments(page.toString()) + } + } + else -> {} + } + } + + return GET(url.build(), headers) + } + + override fun searchMangaSelector() = popularMangaSelector() + + override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() + + override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element) override fun mangaDetailsParse(document: Document) = SManga.create().apply { document.select("div.tax_post").let { @@ -81,50 +115,13 @@ open class VCPVMP(override val name: String, override val baseUrl: String) : Par override fun chapterListSelector() = throw UnsupportedOperationException() override fun chapterFromElement(element: Element) = throw UnsupportedOperationException() - protected open val pageListSelector = "div.wp-content p > img:not(noscript img)" + protected open val pageListSelector = + "div.wp-content p > img:not(noscript img), " + + "div.wp-content div#lector > img:not(noscript img), " + + "div.wp-content > figure img:not(noscript img)" + override fun pageListParse(document: Document): List = document.select(pageListSelector) - .mapIndexed { i, img -> Page(i, "", img.attr("abs:data-src")) } - - override fun imageUrlParse(document: Document) = throw UnsupportedOperationException() - - protected open val urlSuffix = "" - protected open val genreSuffix = "" - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - var url = baseUrl.toHttpUrl().newBuilder() - - if (query.isNotBlank()) { - url = "$baseUrl/$urlSuffix".toHttpUrl().newBuilder() - url.addPathSegments("page") - url.addPathSegments(page.toString()) - url.addQueryParameter("s", query) - - return GET(url.build(), headers) - } - - filters.forEach { filter -> - when (filter) { - is Genre -> { - if (filter.toUriPart().isNotEmpty()) { - url.addPathSegments(genreSuffix) - url.addPathSegments(filter.toUriPart()) - - url.addPathSegments("page") - url.addPathSegments(page.toString()) - } - } - else -> {} - } - } - - return GET(url.build(), headers) - } - - override fun searchMangaSelector() = popularMangaSelector() - - override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element) - - override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() + .mapIndexed { i, img -> Page(i, imageUrl = img.imgAttr()) } protected open var genres = arrayOf(Pair("Ver todos", "")) @@ -138,11 +135,45 @@ open class VCPVMP(override val name: String, override val baseUrl: String) : Par return FilterList(filters) } - // Array.from(document.querySelectorAll('div.tagcloud a.tag-cloud-link')).map(a => `Pair("${a.innerText}", "${a.href.replace('https://vercomicsporno.com/etiquetas/', '')}")`).join(',\n') - // from https://vercomicsporno.com/ + protected open fun Element.imgAttr(): String? { + return when { + this.hasAttr("data-src") -> this.attr("abs:data-src") + this.hasAttr("data-lazy-src") -> this.attr("abs:data-lazy-src") + this.hasAttr("srcset") -> this.attr("abs:srcset").getSrcSetImage() + this.hasAttr("data-cfsrc") -> this.attr("abs:data-cfsrc") + else -> this.attr("abs:src") + } + } - private class Genre(genres: Array>) : UriPartFilter( + private fun String.getSrcSetImage(): String? { + return this.split(" ") + .filter(URL_REGEX::matches) + .maxOfOrNull(String::toString) + } + + // Replace the baseUrl and genreSuffix in the following string + // Array.from(document.querySelectorAll('div.tagcloud a.tag-cloud-link')).map(a => `Pair("${a.innerText}", "${a.href.replace('$baseUrl/genreSuffix/', '')}")`).join(',\n') + class Genre(genres: Array>) : UriPartFilter( "Filtrar por género", genres, ) + + override fun latestUpdatesRequest(page: Int) = throw UnsupportedOperationException() + + override fun latestUpdatesSelector() = throw UnsupportedOperationException() + + override fun latestUpdatesNextPageSelector() = throw UnsupportedOperationException() + + override fun latestUpdatesFromElement(element: Element) = throw UnsupportedOperationException() + + override fun imageUrlParse(document: Document) = throw UnsupportedOperationException() + + companion object { + val URL_REGEX = """^(https?://[^\s/$.?#].[^\s]*)${'$'}""".toRegex() + } + + open class UriPartFilter(displayName: String, private val vals: Array>) : + Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { + fun toUriPart() = vals[state].second + } } diff --git a/src/es/chochox/build.gradle b/src/es/chochox/build.gradle new file mode 100644 index 000000000..73afd9323 --- /dev/null +++ b/src/es/chochox/build.gradle @@ -0,0 +1,9 @@ +ext { + extName = 'ChoChoX' + extClass = '.Chochox' + themePkg = 'vercomics' + overrideVersionCode = 0 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/es/chochox/res/mipmap-hdpi/ic_launcher.png b/src/es/chochox/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..478448c073a592ead0b5f7578ff89cba501a10a3 GIT binary patch literal 4305 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 literal 0 HcmV?d00001 diff --git a/src/es/chochox/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/chochox/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..faf6e38fe7433467f12f15671ecc5d59020a5ec1 GIT binary patch literal 16918 zcmXtAWmH>Tu)QH@aVhRjaff2TDa8sc?(Xgs_u}pj#oeX2ySr{t@pB4a{pva zl5=ME*_qk$B>gAfw5u=LsX-4$z{>dZoa{YiS_yA z-lKiHu7u}8bNh9omvbjaOGbu3mv7=y>+xoDdMbNr?d))nD9aW7@^Xu_H=drt>(G9d z&dctSDEv~W4PK~%O}23T_e$`2>eI2%#ZBzo3`78!oiX~8|GCK59hgn{QhN8vE2Y>S zxEC+K5wZ9I#u&^c2I@a6-9#)jz#f4VMA=Dw3h46?O4W@fQ!X;+!` z`qRMG9S=VHlx66BC0&2{vgUf@pppkSWHF5H6D$&X(c9WWN-bplP! zlx8EYhi5*g9VC&I96`=;0Dfd`QD8DpGRiP-YBAVoNi0KdAxtk>n?d6xIbINl9i!kf zVg7DTh&)LT_db@nQH!zbFZ(b5JeeWlgqjF}0Ihrd%{3wbt| zt{y~c=s5lt6y32b==sP$QS;A1TwJ_r$&%E2s1a(J9I`2KDp_@})S$YNP^YzUjE@A1 z8zB+hK^+(R{0EJY@cCl>j|UE@3cM-Y`Syd8QW5a^gnP~5HGcm7L7A3pDauAhMr*M# zG2a4p<7G%~R9|(a$yi<(J3i0foPdC!3)v6)GCCP1G5p%Tbb}f4?H%rah>dIUE-o%` zE-x=n`8^-6)j(+9;e4Th? zVKBAGt2x!oSu}nUds$<;fG=0CZvi&rUY_nc{zCaqQWR|?%tApv?wrk+uaxiY?QNj% z+;Pkv;RbP0=IZgVQkR|_tS9S4*bQCK>bu{mbdg`i<##+h@aWvzC2zfEXEvR%KG z!2$vO@{2lfkc~eccVl#PbOH%7L8|{4xXhfk+_a1jkFd|}Gu_f`p#1Xl^JfhPBJ07r zV1-jCKNcm*2Isp6O-2B%=O997p;V<3he^AQN2zHrK|j2XIJddjie`20|+MV`bETiJTrl7vdg1Hta+haYr@G*L&xK#>61a%^rvg6=?&^U3m_ ztH${+x^G9zKK-J!dW*}6XA|x8F(;KRb3?LHQc|2LGV(-1Ug-fM(9qpCKK~S?is3eA z()phVTAWWF2b&!ZlqZe9?Z#soNU$0sJMQBgcP!rT@!!$-heb&K%G$Z>CKq0Fb7ozP^|IEUV=@x6{kLkr~fGWDYOsa6QxHl;21Tks-C1$6*~c zWcn{E)6Cw(*vB}k^9Rka)h)7VT%Md%RDl7)&_IbRh!argdIiGEH5$G6`1qc(?7NAm zMl~~N(5X@Tk|P^7x`!@<$aLc9=G*Zn3fuv`w;v~sUoSL&ZW~}K4ZH5_?7T_K%Xbh! zQV^jjk;rwtgk^dvt&QTLd~}}e|Dlo=8I2^iR%kX)t1kY+ttm(>h@nxI_}7g4^^+&l ze7jHwmcZ1_?9*w7OGG5nE6=1b2S{st1ZBiHg;g9OWV&d*LU5Hs~EmT>E=^Xh{AIr zO}&(L(|29me+4<0K?%+)1^~+0qEwWE@og0c?xGNM#H+VnuyZ-mHh0* z9aQTQn2qUO6jTsfsQ5g}M1`G*4fTodhHk!c_+T1kg$_pC>Be&`t!GQh8RRno9g~ON zeFtlLUzZ!c48U`yjnU}~pc&BVc`ny*?D3CCebJeAXQ=j?-FNVAkfmAiuoO{Q-~}@Q z(VV~oY&;yib2(@gAQfX{%$tcg#q7e$i(q^zyIo# z5im3sFbI`g29ko`odJiCY02*2tv+L1NxwQC*wbi~vwVrT?b{#Mx#&1(g9jiYq%|n; zA!tQV04pmi9Y^@5bgbgN_vDkv#Jwuk<4|EQ>b)-Pcd)r4JO|L+0oM6*E(o2I>G1q_ zJkDkGxNk}f^iJCG*BarJ{6=v6?~9a;zep*sKKm{k0 zNokRMrQ)-_-m*xDHd-O4$A$ z0ou~Z3d&D@zE64W@v{zr7ajq_`Y$CP0oSFDEB+5#iLf8pS&G99moN3h$&qw=4W|bc z^TLzEAzs=9o~7?^W5vz_LLws*>rf#CN*-58<}CHIw-)--;5BwyGM<9RDav{ z!(|&u+aT)Eh{i35^lhADv5T-$$1cmK-uCKSQxQv9@;jaIj?_F8=z;DGSD;v8L_R!TRR;xgX0S36 z{l#;@)XGRjQ;2KdX&GuvRI~m)FGklz$kaDOS&@;Iqz^0cPeO;zZ_;naNm5xyPQc|A zrt{cN#DIuIj-KHLtI(RPt9~5yKwLG;xOw(FC7uP+)h5~KpCuBd2uc*VLjHk=g-wA@d;X*9ftj4WcwdP4P{;S z@`o&5rCt(BFQd;?Zn^>BPD%XuAl6yqpS+p<RQ}dw2*nZ*6BDCd zgd;uVgAA9WD5j_k`6c(~g|ep1zW%}^9CNUF!Pd4G=VS7A$7lUBhliSt1e|`tPFp?d zreTfRKDzEvXm^aX)|SfoC#I+PM;`siEw25c^8n|E`qwb?tPJD`sZ%$pd3vf zKqJoxa)Z)~AWeA?v+j;#nD`2V5Uy6fri7cm{rIU884Ie@lZO)ps2;*GpwmI3K{Ud0qK?xM(Ue8EN>yi2#rm@L7G-4?ncBg6!m&?mgzEc~V+ zAE;!(ZF=#hAi{E^yos!)fja32?cx zhOpc_`}~2j;dT^Sw^Z_jzRqeTF>Pk1P=4p{RNmmoNZe=bK%i(#oCTTh96#jOukM$- zjVO)JE)q(uM8-U5`FeUr^@Fsvq|D?{g*7!*9uvg>7OTN#W@dta{1r+SA0a)iibiom zHmgmnr>$p#t3P{?O)cxml}8{^_Nsc2)VW_HWMn)kF}@jmF58V8UZT#<4HK9d96J}1 zDT|A$*Jm3fM0}1u>$;n>kTwS|FG0C@mNXxMg>eZhQ z?(KdyIWvxD@X;9Ml%oM&+R!66K)^>G%_cM=&-$6q!L;%H8QxLcOqq7Fu zFgv+!>oo43X>cx=mhH50&%p75gTc;Tv>hH2taVv{ou_AaPtR1T3iEhR{_o%RKEq>U z<+P_mqXA<>$%BhhTHAq&ii#z!YPq%EFULB#@#*13h;&s+`wkEA5z44(f>?c_Lp;`v z2IJjnMxo1HiLV&|+8O!F+4Yu{*xS!FTh!}DUwEq&UEG?o0I9dahh|1?rfUf{EZlK4u zF8v{L!-nVm*1g?mnh=Rrt8*VBbDPg*HmRYZvHtt!-0!E^@HnGakcE&%5b$9~tvTUv z6c_8JatMEM2?B4yabdb%<*p}IlH3udUR`J4j{G0V^y|YP}ef@;?WmQ zV#tGj)bLg53uJGVk+e3vM5VVxooP1hLv9!oQ8<1V>_Ew0*RNo~J5VpMiI+Ff*SD47 zvMwB)P8ffZ>=#gMG#R^*c9D>61Zp6p{W?W28iBin3)n4tX?9}%0OD1?*G=_o)Y(+fWW#S5143egeXeMe_f8HeY@T{n8ZbekR1CkYJr3Eh{DS~$e&-~6bP|{lC<3sNIb96 zhlhthIoEuVYJ4foLi5;URz;PS^smNd86WJ5Aj9)2W7w>Mq8e}-RCf@-&|V4Q)bWn+ z@VE=Q=}D*}T!JxJ$%Jn`6E;a%%dO5-o{4;KnHK>v$s4r0 z!`!Img)pg;7h7uC8?l2*g_yM*iZ(Gj{$9tpxM9{CIc@WY4vIUA&e$s+hBsFvQDRRl z$w)%GD@E=5CTlmqMh(x;7QTCgGKQ}w1he1Tlri-!$ zGDHUp({UqwFA&zbT;6nfC?mE}PtY|qu7X65J7J*AllM%GApC-(t29i-;CaHi>h*Mz z%;(JTOXq8w!i41!wC|Y!0$^(4d!J^&XJ)Rvye` zhR@`96zujjNq=@Q=C9|yNAKz%gnsHLAm`V>7S?c5d7B9ZXcbc?#PdR@vpAp+~L!qiy|5FGv| z26s(CXr+;Qcr%^uzTQld6{GA;ZU_lnz+K7XYV7#-H5jRGiZQ0?o>D~JBVNz9P6h98 zDsz7U3ehI*ClUL7YG}?E=q|?9k>#&G>C6-gsrEG2)i~%&XEp(vCJv|0A*;;$ae~sWr+^Fi0;KLDv>`+%U%PFqj2wqsxwj?<> zx6nVkxC%|JLNfl?WV=BGcFwyeru@e$xZ5T39haE4r-ur4_eTWr8P72IPxK-9s!$SV zQ0n52BlgE6Y_Hcz@0jp8d#FFcbhTZe5xa;w?BgN;kBEr52FHRQfou2nl04OcD#FYx zDs~n(8R)_4^ON*ygTY>Ku5&V8ymW$I0D7YTR)6yz4R)^?vLd8rI%Gah(Lb&Vv-@)y zxR?-%ik2h#_IT$gcD<}tAZr0@Ye$DT!itRXn-^^zXR=A(S?_GH*X|@voWX{LLE$GP z%8v+)#%V4%j6&o?@r2jAx}&-1X3Y6dB}5piS%-z?23q|&4YmA}0AX=s2dDoefv@pd zt@X>^ay`40PFJ?>lao|3H)?7$+G1^{aIY*)4*Fl;K{`GJ&Gdon=MT|M0pg~?(gGI- zJFd;Edl8yltQ%+PXHK+y9zxsHOd{_jgZANysW-}*$?@SLrXx~uv)7gpDU_R{?SM{f zBctnPMF7M0^2^~D(i0=tzz*PX7u)n=C(3lW7_)J`XdiPC*jxbS_Hw=$8(x&D{WTK^ z+3dGKpPpCm%ZMG7Kjnt>6Ce$WC(inmr+OHACp-RlJeH8wjX%K(CjG3m%f;fo z*Nv^9Ca-{b1YX*N#@N&(6fZhP=mj7Bsbn0*1AjxF-V3Y8%>sv$Wpb90y zeI7TaEJhz3BX-czt8jnIjo<6s551)J6*S`ZM(F7g2mR`6s*>5#VYqBy3Hdic-qz^h zsljEdXUrl3#~%zES4ir#d?Mxg9Q7$PXjFcF0J24blsc;S#{;j5)G)3+y(_^6;jg19 zixvL(-C5LnO|IO>=QEx9`AV)qWYOq~0hZ8}j=i^FJx~|>f$5<-e z9L@oV$}`xEi=kq3o3cJiw z=mK_tA`7KQxA*UfutOMRTZbARhl(%;^;4fdQopIVV@c`sXa7YdEfbpjSs>|wf_;!_ ztYBY-u6`yIp1aY|X>W)%dbhGx!RMg@>*lUwonr{9cUJMUKMP0FVR zTrjtXlnXs85Ix12)bRUM8b%+fWq$zfn|{Uamgpq&Vxm$X`sOx=G$q_?-mzkGO}zG+ zS(YUT?-YFfX8#w!$b80i$N2j}Fd#;$pB4TXhC}P$&?3W!SH$$RQ9uShwe9sYVW2lT z?Zw8AZ8HzD=vVw~WRqx?p>Iatj%dL(LU2rfwhgT^QiQ{zh~TB|ZLTieV^j2_d7{Ln z2qu~hn*|~enOT}HIXjnqdR;ce-EK+Vu?id3K^)TcB6%ooyU8hp#F6=Jj$rR)bbFNt zR=8Y)!nqr|s&9j=>`FPx5)m=>Tgx>p52^TumQ$A%vu@1m=jhsXUM|@tSng9QyUer> z;iC~G`vo@BY9l_RvDlc0VcXuQB`Wwa(~2^am%_HFQr_l}r!Ifz1$oas`mO;gBGCAL(^@9pMxG zDbSv>J&L0Lg!UCs;U`P-p}mP2U$h}j3UCje2jYz8w1wZoY1 z9xUZCHT1gGxDnZVbNsF51yNOAATn9+R8MXm-z0g~mO3mM{fEGp{^QN=)brOD^r!0? zTf+%S)xwS(;(-b@7=Ijd+7IU!N$I|N_e|(@X6NgFcC@2!t0X$ zF)Y<3xnZxyF%KaB-2?`X?(`-Lz2xR$1WGL#Bz#7#U)@<9qN_!fXz~9tQ74{!%ZN19 zGCsK5MT~vOuLNoqqQ`!}pKDuiWlPoIyLEfSMdkyFvXu#Vb7NnwQQn5D2@uRmxT=Z1FO%2Bavp#Tel17gWr*v`Zcz4F)nX=dsv?y6$`T`-Z-ne3~J0!G3?67&pGy4;ri9ZoVdmK&uahdk1tF5l) z7`i=LP;2=~c&=D_j0m=MTtRvQ8aa*|{wy0x%@UiwE_Qg?$WR#6KYo0Sao85je$GYN za@mNGK*S-xsy7R1J@dfDTpKxf>k=X8C#@@ws}2lv#;7P@)K_@sMiakWn<>oGI9tbM z)rZc+XM@(`6NJ-{5lOaWvU2tM43?#hZVDF{({XX5{K>Nz<4etek5FqOx>1FcddUml zy43u4Um%hZaZnQ(x*iz4b2BthJ#gQBW=FCtR_~R|48Kodx7&XeG<`VR`SB<}J+wpu zOhpNXmIV`w48KMCUC$JV3@`|bot1%JnOOn>Y(s59-H2&rr5d%bB&6CPf@#&{S#)l{1ga600rH6eJ)WZ zQ7Q5NT7cdcZ+T~FyecCysmEQ+(Ty4y`VG${zD}2k$sE^9U${xr31ZEqx=;cFi&|k4 z#JYPwaRmw&HyCd)T^=58tV{^;GU}rQFTB-_&iG_tHpM1Q<_LeRxGJi!yjmikbIhN0 z1Ze|Bb`G^>jNh38c6yp$IkX&yel*1{O-vX^H=?r$38EhaBlq;hW3B$Chf3onm=gW< z=X3{+jA}qNpV5w~YUr3^KNK_ORmeV#^F3D+OQ2}mO_yIbzyttwT=BA}j}Etu#Lk)p z`jiPc9O0CL;^8JeqO-3V$ z!u|7yhM%Fwf&xE`wxsz*FF@F-3a~9K*s1Wgh+^H>-7557<)G-ISWO!e#ckQ|GK{-* z3kTR}*Sk8!iJ9kVuV=uwqsUz3(Kk z09uthstU$fUG*?@@q-BDoh*&iJ4w6RI8wvfwkB&?S^L=KNLq(&05)llm7d{^dd z&f3Y~xXJLq90VaQlTxv)2O)6M`w_#j;2VwYmz?RkLP+z3^9tL`e~U|QGUnINgzHx7 zkvCNbb=Q;$GcKbW-4P-FT(+b;5D6nk6nH!FPXC`Oe~k%Fyr7Km(f|neUv6pkV!r(f~rC7ck-p4LDy_6f4)N&rF0TOLz$L5Hd3EaB%VP)PLi0Y-Si(isL zGL4Ln+0l2bw`)w1k%OMuy*dpy`|Iw+0rDcdIn}g$g&7^FOK;t17H>f>*0hV=8Tr;f zK;FXfRM9sI4x4qtwN|Gdhne47t5v6_7hAkOIU`l@36O3|rWdzV;cZ3i7WmBBj2Z^Y z5sr9J9%tTGt~f0T58A)m6L@_Z^2>RBZcp`E-&%QA+9encwfYa=-VtY1Wq@pZ{|s$; zoZaBNTD>Xi2xHY(6yV$4df59k{GzwbZL!WwNxVI4e+@?1nl z)^WNTflYT05ML^0NiLM@JBr09bKODCGI_FTyO1bTuZGeqB^IA~kfYuc%9PnXCPeM( zxyV6URLs8Nn(&17aSe_W#r?apgU;r{G~DVUc|R`;|Hb{IUdFFM@!gMZ=QT>3Ts_?_ z$^v8R&ahG$$E$VHkLRM{Pxl6=$u*S=0z-Vz?@|ki;d9eE*O9wcWNS6-sC44PkwZyb zrn9W3QIHi&9p5Iz$3ObU=XGds0qYvbd*Sw0ShZuT?r5)U?UQituh9Tm`XIe+~-U)TiHg5E{I2||f7P$3{A(qZz0442T z_HQyak3>kf_h+JrCH6~2r%d(tiiNzQQ4no+onh4tFq4f(JGX^iH|4&^svw-TKUtqr zpr=PH5b@VaA4X&rz6pnB&%qqF*qG^owGe80<;{knxN4U(ZIfs3 z2?5f9?$E-gn+2WbycJabb3nOLJ+O=yUGr9gUq{O+eV${}RH&vFnL}$_!~pI6Z}ezA zWfi7eOoT1`{7Jq?gZnXlqTMKqCYk>RV(%w$J}iZ=^lt-LLVvL8(B zjK81S37nX$qP1(dftG)Her2S|?)5j?7fZKABR_Y zz394aBglBZIPtr_y{xAE?AM0(kmIWR##(hOQmuD&*W~!Xmf7@R9RKne%`U3hgKNG! zyDb{Vz(n`YHoqVGJn`yRu5S5#NysuksXj32nDV4XzWp$`kGo{a5k(yFm+GrRofBgC z`~lk1UF^z*DMqVKGU~3Cu5MF1GLoH{>8o6(#=T0$096jQnuXYUBVoq?&1O3~#cuDb z6A54l4d?YnM5ck=^K$|#ZhN5f(>#sYC#0B?8r>Q##T>vpq87j7U$Ti9LhOko|@PwK)ZXJj*#^!lrCO!KK z`>4toyIxCn?T$)84yaZLFP1lwyS=z;F5Q22d`v=LPZQeN`Blga;AFyu%lZaQ0H33X zj{S%r!>XiZXTYxDHJV6V9D0`Xhk}lFu+}}XsVqwTfw>;DMesSWvc`{<+1y8Z{=sl-A%Qyrc)gLFIUx+=}13Afwc6g~kuYS0mF7|(+UWFuv)q6Eg1#nZ^Ivfc zqcDo@`mnRaa%9t^ROLf8uY4x08?nSXTMI4nwdq-`sw1}$#;!OV@%i^oM@Oq!dIv-? zz2F%Ii;zH49fVX!a!7CtbcT6lM7hC)Vxuf~f_q-#D1&C`c6Vzbp86cpuc_~W2C}2D z2g#Qb-*{YNMO&*(Inw0)?S+(kji|n&fDV4M!dpAg;E$%lj0|a25vQSE4T_*Jv}H=m zRS!P3;E+qUg*;bwNc?-L6w$F0gR)&zOLvp<@6KSjuC|+`Nk(5iD!RfAA(gAqP$fLf z@$JEeQfgF9mduni6uP@3shI~KhWVpC?Lr4QTOmr`@{3*bo;h=kXb;<~<%e@;Jlb3n zhAqOCRM-*jF*Lfw-5^YE6V>35Z&KKo?ZDeQllupaw0ADo9aEqw#7!< z^XM5QNhC)VO2eMCzI-8wZh@zLtfeDAJ46um??CgKQN!I{qe;pKm>Jpq#BoghzD74~ zk~&T$gmKwVvslqZzX|v+(qxI59*om2al;}Da5cl%W@LScc0s{s)<8ObScqXE1BW+E z#}2L-(FB?5TCQWq_+#j{T)>@D7M+WVMAyp4eW%kk)q}+Gq6Dmccl(}9+L?-y-vRXw z=KdkRR=Sqwh~#ia4j!=2!BSK-Y@y$dw%vW|Kj!VFYWe)G5tz=Z-NB0|Hk#7yM}po+ zhF%#eM7s;|$ok*{E<7{QHJyfzd27QIj%XLT&PHmS{CyA4o2UypM_xmlUkM5kkq1x114I**opdsOURI$Ckye4I$dn4$3#25E|%oZf54NX^&Vr zZR%lcrRgHLp8!w(L7i}#JHRL9;HX>n1Y(;X_9Iljz3w=Qp?-${qmZ&2evg-JnuHQ0 zfq$CJ;r3M~nUVCu^!5#uV#DS`0Z*nyB&BX_hsY}(37CZq(T9EJ*r-E@Y~x>K;)lKx zTAOGv^!yvYQ-yE)a;i1>W{xLfqdGtoUwW>Ig1wZ*PRo}kxvL8&V>MFxk2{(IYgZE` zkDILNtE3pJoT%8w3?bs>5={*?ogh+t#$?arqHlEM-ed~@JOl>P{{faaD=rK`V!0vZ zTTM8_#q5hyINH7%ci^)^A(1$Y+1PyV+U5p-mJQKS)pqw6-v2<_7b6G?{Cj`*7?$ z6hMo)eea#tBjVOroF1!jm+z(N-Y(HRv3s~f?jRN}o5&E5nkh@W&&tnjp+IjaGeqCZ zpX{kN>*0Q5Y3R$wAQ>VU&12gdE(9%+7Dvg;{jsXkC&a)FA>ZV!V(Wv|FQ)sn_N-Zw zpMUGp*jkf=2R)1`lCiS znh8YLqkVJ9R|(<~TQFj9fr>{|gZ3m3&$#>Jpj5-3ByMVg9s2c?D4%xRDj(VzuymX* znPwmnC9xaLr_gc+>W#AV#_=mtkrU{KB=JC*MG1`?b@1CXWLI^yAOqd|YppH=CE{Ud zk0b85xeFBbJ_Y1?o6W{(nZGHKq{j!)c4!X1;LBv8Xe=j%co>pge@iGCdBSdDL4`N- zW>0Ng?DQw zw$G8dAtsG^Gkr=`=^ii_c@8 z7@dO)h%|e_`EW}dFb7d_Cy%8H5{*R>i*L0!RUH&`C4Udd-bXpbqWqRfl^}dUY~q!n znmukQabKm^#OBJf{?hTbW6j~AJBWrQlj2un5DZYGMk>Pndw}>CX7%4qO)WZHQc}w% z16QYOP0yDYRSlLr49XSZ)chD$6Pe;k)@!!U_jcBz=EL!Hxa&FKva^n;X|2{x+EI`} zl|8JCzNUvSyQ6NMx~YLa8kZ}}2g#`Z+$5cT6&=sMay3|F`~WwH{mwQwc6*@*T<2pW zXl{DnoZ>Y%I_&0^zl8p|9qCUW!{y+tGzoM2!@CNI1&}zKfWI4ooKMy>*)c;~)qO;mlj^Frv|Ytl%q`-BALNv+^%SjKQGn*&HIG9d>c@M45~LDOrkdSAc#3ou9V z9e$A$!w8xS3KY&t58r%!v7@F#pkFB8v1X)LfR@YT$Gbx%M!H)6Q+2wEV4;q$8U|xm zYpgeQd*b@$k2;wvj>wQ9M8f#tL-xxtb9{y%vWFasNUIARpA~+E&CXBHFo28g(=QJ* z@5O9kDH-`-=QC|pMJ2t7iC}-t;J>7q{k<7xsO>u_>DH^b^c&t;tz>fdWI5|)DeP0z zTadr)p0q0+S$u6K6Jt)1W7aN_jPJpC#kg%rQPN~wA5I#ZkMW0C5$tWIwFKNrWB&$* zGczL7GD~iIoat>_RBp{o2<}vfq;u*)sqgOktW|^O9S#)a`sW*&p4rEZ zbi?Yn5J|7Qf~h=iZF4kdMNzjL3+0kqbU|<&Zn=+`HWv`c?h-0YJA zygn28@j3Sv==HGdB&eJZkgT$PTb9=azw5^GhbzT?z3k&O3rA>XE|+U?bI40UC`vyX z2ZM#N5mie+rdF|NHmt;aME4aq7`Ia)jxBu($sJ1i$8z^?3A6ECafL0LmW$rgsj7`) zkG}c5H^O@-FBkxNyNL467F}sDHDn z!4fesnoT*(v_MZyRZtMQM&&@)Od;<)4d&SiCLZ2U{Zg@kWL-#vxM&)3H3K3MYtW@V z3p)CsEl)HtVR%O*$v~2h*O1nPlw3zFYO}Ea-~B`lYvIyfvECI+Qk);@ocOGImxib7 z@)(K@)@%4K>uxm54d#LU>Wm^E5WnH#1fz0UZC8B5BIYACI9_dL=Wa+GOUu)9G55iRQTEI!mM1Wt!39pPXz@<0IW}E*O>?oTAA-= zD%cCS|NO~c2(gDwB}^x8ERR9_K4j>sO*TG469hSmdE8w^Z$^y!8JIML;T8ZhWHlxx z*sN?jkty)eMa?}8`jXh;UH!tVjK~HnoHu7{ovFDbw|mvEz6Kr3E)*dAP&)N)9pLGq zG9XJ@#NgdkRDaD-mCryYeMeR=OaXL(X!o{-?FD7Z01Bg!oLF}8T_en#Z!LWtNIeM@ z_MuFJDfE|Q3w#($VjJuI5{^=XC7w^WtGKr(8^N9)cWxOtvMLaSAE1i;gT1qWv`gj+-IqJ8-Hu}&aJmwSI z_@|R5CcJDa%w?~zp;9@NL!pPu4ph=B$HHW3fh?Ud0Bz$JW*Q5=)u$M;`U;_unPKJH z^wgTBW{j-MRIpD#`@M|6^bOEnBUXn*ZG3LOH~U?H4pzLUii23Hh`svO>;|GCXW34h zsWV2LZGSJ8!&E7s6L%CAB3q*hwmth8cewo*tZsU#t@p)!Y`O^ufsL?)0xpTJsL zD$ic6m=Zgm{hyGNaIEPEgM*VBu#AwH3n^gRn@>`gmv-}xFGwhM=B0BuEU@P<}Uf3b702Mf4*i_$&E`g>|kkSA0Y8TB`_flMLU$>LZ;Nk@8ByUX;z&=>IPSOc;>J0uc?^|Ueo0pgOt*Dy$6;!pP6EO+4tY+kBZ0lrEOTv zbw*|*Us5QBYkZM?-W8=og~Fvs>BcwPC6o!mbNcQ!)qKeQ(h&~@k@6)2nCyndm$VV8 zU#dG{ffIa)%tamkWza`X!;u7GE%~aZ>YjH zHbuN|G8Kw$u}C8QsbZhNGq=IYOjf+C0;Tu-=b-FuU2*X#xu#@ND*N5p1a-;(mOg=8 zNoL_g)&eQ;b6{Ig-XG&V5JV?8fvv`5MS8DTElYw~5ie<;#cXdnF%K^+YnTI!dueTi z*SwYSJdD{)HheQIFh+D~y{1@)-p_N!K+#bo?!}nYCWj@02=ET)WLR$0(1UFXYIbMu zT!`o{%|@mZt1pgX$qn^jHoDI z->py>uu9_Gb(qq5-}Uec?BA0{N!~o;XxL*MrrdJbUhzOU@bXu_pfqLK-4HPH3WfK9Mh9w3<9ovmE&x%c9fK=Gfsj#930 zq^Mw>uyq3YC{HOami;yyK8c%ke`R3)!BuYkqFP}M?%W8k#C9l6Fe({tn(IKLOUQZA zT8|21P;oqg>fHPL(>eezA_yy0r~Zb^-Mc0Rzb0WYT1my6h;FYSKEa~ct3;(0utgrG z0gzz*b#6iCJO85N5#on?%?(}5x%ZQDiGGa0ash1x!WOAkv*z-lgw0L`^H(lzKV(%Z zSX^!q|62%BmvoMsl8KT@DO={e@0rt&yKofwgnIEuX8BNJEwC1C{q@K|PRm@TX2Ip| ze;XoAL}z5NnqI)|`Vr(q))B1na2$k`2O9aT*?}nY8vB;i9rdHWI5|f^Oxj4dxw^e7 z6N}(m2{WD5oZ?a`JP?n6y^#MYp)|iey+!d@icy}Is9vkg`n}-5rOh++Tm<%bD+CTR zhFbhj6bs-lCyle0`tFFE2k-JKj$iTp-xaOr%Ph6j3EDkmMYs-ZaKF9{9{QUSp*n>m zCaqhUapq@+M5`0STLOP?+&heYP4Sdlv@>G&*c$Mw+p$m`kXhRg;^DY}dk#}8)|lm! z>A|bLIMXBdJQcMY%HK)_Q|_{f*aa2ub=D!^qZsu2hO|zpqE1LLMbpfqZs)_M{Q?&d zkQ1~VM;YcO@R>|S!s%xAmc{;>dU(V>KymhBx&jIK?%jbZ&Rv3a;f5_W3Z8XTma^)P zA6{JNkHiY3x009EaLO-(1Cs4)(!>&NDk}5!21iY7-Ow)QI(M{5SpliT3{9>AD^cVJ zX~V%{4XcdhT(hKZiy}8X;?73#A`~D)ZXg5pCh_CN=-byJ_ep#wrxWRf9A{;zao0T` zv2mVbg^YJVDTgaEqgEP;jvtOu(vi#fY&fadioXbu5<`wc^5ZM5k;%j(D{G_|kj!UQ z3<#Yhg5H(H%dkF+y(MFb(tAVY%#E4JUKM@^3)sMO2B+ft_n#+J43{atEvPHjRy({d z&$m*s03iTiA6d>#dAG24K68XHmcW#)dQ_C5=6pRVX@VtXgn+boE%nLRJ=!^zK%B@C2Mdr0ew` zLf$>Y3JQ}4@1lFHj2cRa^rWjSOHQg4ZA?La#r;n$C#rU+^EyYswOX|6hT6Vv7Xc7B z1Br-;7^{}g7d~f{f6MI40T(LvtF%Z&v-7H0WSpO$HzI!ckca^2Dse)`7V*>|%9MpX ziy$HR4p#OCh)GD?GJg7`ek`kORh^M~QbP6>84u&&sDzgI@9$L!RLBtNeFEC5sX$`EBZltpXq-jb}V3+ zvpahxN*;!Lly|^&QZVh@jRNSv;Ae#4U{-sNe^z8N^PqH`cLCnmTN3gzgNmyY*{@|b zH#c+EdUg9}&hZv%mCA*v+9k^l#KjGb`yFOfh4PmBK$Z(AO3dCfI5ae93yxIpSJVs# z&kU#phtG;fyAN?&hfmBC2VaSff2ey2`Y>zS2_bmiKX+`OOTJrGkK>l805qncFSKIq z(C}aIBlfj|^e{?fqR)TOoF+vY`Kr#hl@3jt565yQ`&3X8JmbBMuwm@H^%y<(oL%d?b^5=XJ1_UVdD6gs%B5DrHUHKC;;TE&hqw#jbq57krHqaN?}WiOZXXvd zGr9Hi!2Ssm?`ThGzXi-ba@FqznHHd}b^rwRM%5`bYs#sm3b%6T4GuTK{q0}m7zp#+ zHU1i1Y@6)V{8`Waat&@1!^cMJP!?l5T2<$MFG}#9|BYg9qX+>Y5Azm}_3_ccL<6Gh zK@YLs2Oaqg9YG2`1aqnA-%A~f*%dAFil%}dRFfvw(Wq&3Fs9LVsQcyHdp94DnFSA+ z4ZWw$#O-SF0kjI3fMXCb^iS2^H>$VsN<7!IuD9|jwIZ7`WzJ3lp@$K0Hlgl6U<3@g zPr?-hg|M8e7(ScVR+Kj5(ZAm#py|K+0pSW@}iSO7N$<$F?0Go9(mBCjZJ6f${SNg5WcHO~(dE zp;U?4q9y*vhsle_55BGxm4N?%8VNR162te=XLBY$0TU?zipi=Q+_kcS&*^3K`@4>Y z5i-2X{{%q+zW#6dYz`j^dH(fe{eT95FtieeMV{WlGw!Em{{Uq*mF?rI7w72($bf}u zP2qnF%c`mvYNM0cswcyHV|;)2L1x$MtJRPOJb~b8?0z$TwHLwFtqVLuE^kI(4}==B zxBzKJ5XNvm-E(owcT=@+$J@AT+URP!y#Sf(`fkY3fL{&YpNn8AW32~-6m4C-WoyLP z1Hl8RFoiOgz%r|;(BXO!0jz-lX5eeVVy}fU2C((JUTP2Q9@h7+UITvAKmdCHKaTpU z5MA#*oYN>(5ANmb0dQ4-p?(l@HBb)#Su7$~-F~hol?)Ykr^Xvp++$Ax^#D*^rS$?U zG*AcdQ4fH+Xs>m^uj5A#Q;Ka(u>fHQRTWlOY}Bv)tOtN!)mtw-5H%pAk^cwy W+dq+>)Pq<60000 = listOf( @@ -11,68 +11,63 @@ class VCPVMPFactory : SourceFactory { ) } -class VCP : VCPVMP("VCP", "https://vercomicsporno.com") { +class VCP : VerComics("VCP", "https://vercomicsporno.com", "es") { override val urlSuffix = "comics-porno" override val genreSuffix = "etiquetas" override var genres = arrayOf( Pair("Ver todos", ""), - Pair("Anales", "anales"), - Pair("Anime", "anime"), - Pair("Aprobado por c1b3r3y3", "aprobado-por-c1b3r3y3"), - Pair("Comics Incesto", "incesto-xxx"), + Pair("Anal", "anal"), + Pair("Big Ass", "big-ass"), + Pair("Big Breasts", "big-breasts"), + Pair("Big Cock", "big-cock"), + Pair("Big Penis", "big-penis"), + Pair("Big Tits", "big-tits"), + Pair("Blowjob", "blowjob"), Pair("Culonas", "culonas"), - Pair("Furry", "furry-3"), - Pair("Futanari", "futanari-2"), - Pair("Lesbianas", "lesbianas"), - Pair("Madre Hijo", "madre-hijo"), + Pair("Cum", "cum"), + Pair("Dark Skin", "dark-skin"), + Pair("Furry", "furry"), + Pair("Hot Girls", "hot-girls"), + Pair("Incest", "incest"), Pair("Mamadas", "mamadas"), - Pair("Manga Hentai", "manga-hentai-3"), - Pair("Masturbaciones", "madre-hijo"), - Pair("Milfs", "milfs-xxx"), - Pair("Orgias", "orgias"), - Pair("Parodias Porno", "parodias-porno-xxx"), - Pair("Rubias", "rubias"), + Pair("Milf", "milf"), + Pair("Muscle", "muscle"), + Pair("Nakadashi", "nakadashi"), + Pair("Sole Female", "sole-female"), + Pair("Sole Male", "sole-male"), Pair("Tetonas", "tetonas"), - Pair("Trios", "trios"), - Pair("Videojuegos", "videojuegos-2"), - Pair("Yuri", "yuri-xxx"), ) } -class VMP : VCPVMP("VMP", "https://vermangasporno.com") { +class VMP : VerComics("VMP", "https://vermangasporno.com", "es") { override val urlSuffix = "xxx" - override val genreSuffix = "genero" + override val genreSuffix = "tag" override var genres = arrayOf( Pair("Ver todos", ""), Pair("Ahegao", "ahegao"), + Pair("Anal", "anal"), Pair("Big Ass", "big-ass"), Pair("Big Breasts", "big-breasts"), - Pair("Blowjob", "blowjob"), - Pair("Cheating", "cheating"), + Pair("Big Penis", "big-penis"), + Pair("BlowJob", "blowjob"), Pair("Creampie", "creampie"), Pair("Cum", "cum"), - Pair("Group", "group"), Pair("Hairy", "hairy"), - Pair("Kissing", "kissing"), + Pair("Incest", "incest"), + Pair("Manga Hentai", "manga-hentai"), Pair("Milf", "milf"), Pair("Mosaic Censorship", "mosaic-censorship"), Pair("Nakadashi", "nakadashi"), + Pair("Paizuri", "paizuri"), Pair("Schoolgirl Uniform", "schoolgirl-uniform"), Pair("Sin Censura", "sin-censura"), - Pair("Sole Female", "sole-female"), - Pair("Sole Male", "sole-male"), Pair("Squirting", "squirting"), - Pair("Stockings", "stockings"), + Pair("Student", "student"), Pair("Unusual Pupils", "unusual-pupils"), ) } - -open class UriPartFilter(displayName: String, private val vals: Array>) : - Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { - fun toUriPart() = vals[state].second -}