From 76d5e78296edde07464e20cf07ddd3df38f95a4f Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Fri, 29 Mar 2024 16:10:21 +0000 Subject: [PATCH] feat(src/es): New source: Beatzanime (#3111) Signed-off-by: Secozzi --- src/es/beatzanime/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3933 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2031 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4794 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8732 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12707 bytes .../es/beatzanime/BeatZAnime.kt | 281 ++++++++++++++++++ .../animeextension/es/beatzanime/Filters.kt | 45 +++ 8 files changed, 333 insertions(+) create mode 100644 src/es/beatzanime/build.gradle create mode 100644 src/es/beatzanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/beatzanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/beatzanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/beatzanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/beatzanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/beatzanime/src/eu/kanade/tachiyomi/animeextension/es/beatzanime/BeatZAnime.kt create mode 100644 src/es/beatzanime/src/eu/kanade/tachiyomi/animeextension/es/beatzanime/Filters.kt diff --git a/src/es/beatzanime/build.gradle b/src/es/beatzanime/build.gradle new file mode 100644 index 0000000000..0752e2775a --- /dev/null +++ b/src/es/beatzanime/build.gradle @@ -0,0 +1,7 @@ +ext { + extName = 'BeatZ Anime' + extClass = '.BeatZAnime' + extVersionCode = 1 +} + +apply from: "$rootDir/common.gradle" \ No newline at end of file diff --git a/src/es/beatzanime/res/mipmap-hdpi/ic_launcher.png b/src/es/beatzanime/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..20acb7cf1e65ea6c1d8ff9ad73b7c37706158bb3 GIT binary patch literal 3933 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 literal 0 HcmV?d00001 diff --git a/src/es/beatzanime/res/mipmap-mdpi/ic_launcher.png b/src/es/beatzanime/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7eac2c9e7fe0f84991e19517318bee9ca255e406 GIT binary patch literal 2031 zcmV00teR*< zi2(wdM${O&Vh}k>Pz$ByEVboq3*C0x?!D{xy?w8{ZFiTwN;P4Um))It`{w)2cg{Q+ z{^w2hKbIf(0D4=4!8E{Qa`EadIo;yKF8buFTk{K0Qc|LuH*el5wOakMOeRa|E$Mk) zx7*!hv)Q(9*|KHX(xpq=y2|1YKxs0WKGf-Sul1(jUFU9ZZ~t7Y)h?udhwoTd0RF9U zI2?5fg`!VT09Gg)SU4?`|A^0bI-M;_rE(DcWGzUh)h!A!Kp#@ut#IVJTlbPV_oca- zf&uWFrVv2G-4ZICc?h5%-GAHHp}U&Ue++;v#Vca;01hYcXEle0?h7aN$!Nl?{y=Jy zpT&*B2^b}64YZnpaZ3O@fpC*JI)JEy`%)8uJ;gven{4b_XaMQt16Kq100WFA0Ms&*LYX=+Vu;uS{JjxK)OxJRLHXr{b&#E805<^`V3}#?a6yG$ z4|O6X^|WlL`jU@C&|(K*6O&>2M;!o`3#Xu7unqF_&4MXe3t0mOub6HZ6#66@Qb0TY z2{I>@cPvETjt#)L#bh6%6Z-%d_wRy!{c$K5fK8|qfX6r3McAAYawkDGU~t$vhz-CP z0$?9tX-=^QbZ|7?hNXNTG%JroeyODkfLC})Vs&~JK}_r=fYA&fnve)!zETU<#bZcV z{s-iBRI0EEy_5}Weny9oZWk}VCn?EQ3D8d|>@9#rq6TRGz3&3r1lSuIpN zA>rK`CE8YwN2^W_r9uuBg-<&Vq-!Ni2%}szFC>R zyRwsDd?^d2R9fW}iaO>tC^#yqwXhG!M!Z%F*@Y9(jCcg`1Gu;hy~P&5S8%SNoE}?u zOze-_MH7)U>2X*oTA9z5A-?%K>=aPlnPcF#o1v<$fXa{u-LSka(gzPmu>r_q4TwJQ z)vJ`q;$W$%hI4%>v`roedzuEu4Kv`P6rpZygq&>OYO^C=?a9O~ZDu6pO@`hu9B!vG zXD*NJgj zI@({(5e0Ljw(c4Xg9oAFQXOW$yP5a8!kC&I`N*-ONX_s@tUxrZffckLpsQnpAKrd| z0Y<&<)qn`V6PmBp!1YQAwB@v!BjE&qIU{I9^bLwaN`(>|zWo8)_x{mQ_%X=xx0a!3 zF@EAeG(+PgY>j$KMFT=MEnZIxfNa>S_UG*Up`okUuS` zFT@T&@`0)?0X5J*DGiRIkq|Pl*p_VGhW#f_3j)7gTuc$jfz|6b2&2!=nu*O@NrORJ zYycjl<05H4@Wp%~j7rV<$xl!my&(L&HbRNYX*#55&=l-z&^kLk_G~;7Ok-3@jvYDx-a`xT#;?i0E= z8;{P(g0f!*jJIx~zM%m(u3ix|#p_=9;%uy2y$YJ-?#D7w0C=;D)o8@|f36DkOP{`; zgX_x|E+KPRHX3Rx(cfl-mI^j$`Po5dEL?%Qde3R))bXRRW^FOrwfDn8zVhCxRj4RC z4r61ZFrJv4j05`*VBiqXfq-v|0>H0EL+W%vTYEd=3E-K60;nh|{U-qKL>c0KUU()S? z$o;$n=c@+{qB{Z~_ulkR#sc#x0$<%!8hI!Qa~XT;_Im(5wX&f;_h0e@uwE{d2yXxY N002ovPDHLkV1hxezbgO$ literal 0 HcmV?d00001 diff --git a/src/es/beatzanime/res/mipmap-xhdpi/ic_launcher.png b/src/es/beatzanime/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..54a3a33e355f1da24c06f294798a7b46a8771eae GIT binary patch literal 4794 zcmV;r5=HHaP) zESQsh_SyUQ`}X&J``h0+M}cUGC<2Oz-aUGALQ~p7z_`qRH{OSLXjYIpoX=34u`{Jv)Rsdb#-mqv}x0}RjXEY zIEi2~{FXooVDMG@_wOG)W5$ek)N1veep|i?E7q3Ly-Yeu-eDGXh3!DkU}`830%ECwL?WP8CSw~B-5>&TsG}x2x?@T&mjUB!Imk$>MJYL4aoQkRWSos8u-q4vW-=vr+jH zAOXIefaaKoJ4qfDT|ehf0$zU{uv+2h>ViT^R~ihoQ{mM@aCnA!^2n2bP$b_4XMQG3 ztBRmj5@}XiWGa-fX>?F3)KDa4BPKH!N+X4=6#kYt!SUm>wh!XuM}Q~zi)c?LM$39e z*uQgwi%)!02OPi9KW_20u}ZYRe7EG@fF?Eu4wV+lq+DojDS%2JIfE@P0=hhG0E4=J z4Un7RTMW1C0oH%$y}KGi1iZpFKw83?E0tCYwJ{m$oC#2;XNF1C189b0o=#180|*E} zX|fl@Mp%k~1J44Z(tVHWwU3E_kG%h`RiORVS-v%b-44UJ0@!=V^Xlq`YV;jYrKARc zUU;kA00IK&a3c{gTY>=gZVs;XNr0{01jouZq5kl!w_)ZPFc<+2JG5yTh{?!-wdpFX zb`^95MNsK<0dzQgRpdc{=L`_LmA(id3GS>ofY{%cLAC4R03xny1pa3?_PrCXcCjdC*pouk{1D;5-VXJ1hkfa2Cc0H+ILP5 z5FjScrwa03H@MEI$tbI`3lTg1_M4D^+0RHD;e%|1y}h7@_g{xD$pGC4=lcopoH@P- zAl)za{l%A&G(we-4&9_;C^fvrJ^V#JGr)@gl1moNLu`cI32>O&&~@Sy*m|unY(Edx z#}b=xk_5O*zf?R=9cM($ZFfPPlrsG2vy&`~9Wge-Vgkg-ND$C=^e}YxtLW+IgpLT% zcoM+Z^FmB8!mi@Iyp|$B6RU+i`*y_T72c!-c%mXfK+EAW=vB?=HJQB$a9tm-M*Ht* zB`g%4O>~ID4pQKAO{G!+O zgz@xQsJ0%5qR!$4KA-6Qw{hs6m&-a9gf-ebI}xYnU|fG_f)dEk(cJ@^%`OBhVzvE7 zS4VLoh0cJ4e<1=wjhqHRp?qwBm;kZRZg~tya!<6g*ET@;>pxH`lXC~nL!a0S6Vd&P zN$8;%UQ4@K06pHIheoY(bC#GKHSMA~Y<)x$5usAUW_KVqMgz_5bD>Ng{`G+T2#^Xz zd#D#T!E)OTQ=)4|Dopo}Mu)u*DwP5$#yCN*(^6{ye20Q&h69~6Gt4Rj^yxWJsHQ4;v65_>NoydKTxwoS#5aO=^dTG^_N`vpY$W z-qX@Zd6N`vb*dn1Pd6;&Zsv}=4V9IZ7&B%Jv@tQLE8hpBxgK_7Hj<{@JM8-f5hOrl z4cG=0FZW)E`EpexNU;~Cp>xS?u*Is-qSV7Up$PHGX{f5I#&^DR8=9IL;W+wNQZKx> z(2r|Fp9VRz776E+r0*N+YhgRK4~7^u3LV7iGr(LeNg1&!`j&aW7{Pd^|6AgvN$xz zob|v>NPs8skCGbDi>1&3>(^(XDRb_E3A15t31xT!@f9lZnC;NnzJU@=-yvo|X>ANf2N@xChmh$1u*22E0@OL%nA@ z3xPUH2h+3DeLgQ{qA*6BE|xqc_biFcf8K+wyFUj#knZv@PrIL~piH0x$=(6mG7ry^7J<>68&k+Ml|3?A!%BvhFq5`{)Nx439R`Q&MoK z>=3kJR7LWd0a6<>5(F@!=EGm0?OGKw%A2A6-%3fTw5*+i-cg?EiT#1OuZ~tAmKJGu ze7BGcb-($2VcQP8yYI{EYR9utwjD2Tco9D)FDqO{J_Ov&HbBA%`yjyH)ro5dcR~3{ z6;j`;cE`ghxt8aqdJr&Ra7}F{BqS0!&QsmAxA3DU)}z_P&&zpBzsp$9nK1)f-}@t! zF{IkUkkcg#0vx1*6jB5*I7hr~fD7%8tM%x3<&VgG^R%Q5a3??_#vwZO=~w^26Pqc% zU0rcr1Zv}A8be7aXrgU<_TxA2{>5wSW&-*At!-_nYi_=dYJUog0;R9Mf;kU97#!LXwQnv0 zB*5>X^!5K(zXd1$dC3c&)lWW&zTRG}*|^bZ8U`AeS5$wumdr<(Aw&v5o)9hR(l8NJqlkOoV6GO3rHyLLiHVT@_B=fFxt zh>MD9!qmMz2Mt5*#jeY#RU1l+|oKw=%>hk)L)Q_z$6Ur7miNezifilJ1-_ueYS z)cNxVodtshV&qAH*ar9sBT0_jd413N@1x4rj`Qazdye8p3OdhWhdxSA09&i@YWk|Ad3jor>CR+Y6I?@HxE@;yk7+K(?yH0?v2;`pFtZ!kr4q;0#Y_0 zm_d02&nzz#p)Wfg^b#plo~lHSfBg%Yzo3ooLqq=uHh_y&%gKJO*b-ljy_e-#LD zMjR#<6yUF)e+I=6Ht^*^Kr_8C>Me2wMXxHbUu%QoWDRAm4ZOa9b9-2v?ap)bx-TJ) z(@ELVNt6xYP}9uIp`4y68R(rrNmWFIRJl;!h@UKfNr(selJH>8^WMTo@B9JZn@z8O z3-Ym7c@W@%l7qaBj+R!KDOpO`ED@ECjt=xvN+Az4g*Hf9TibBy&|b_QlPI{AfxL{i zboXa?=}+`@CD-?AZnKsx1coQ%KTk`ZKVcRhnkbTv4^)D?w1MlqE zg>;=7skhu3FbT4o0p=@|_aCdL*G5pdSV${(9}7n>D~=w;cPSpPp)f(k*T+%VaTe)` zMyXv%FCb1Z;w1x2v(~vx>3h%~HhCs}Z!ceh8$4KbN9y;nAFTs{F2?Rh>LnG>HYB6hJ*1SZd)iyHUtDBE&l5G+lR6=G~lUcR-pdUMOY{? zi;I%-f|7D_P)MuaU#_DhFh9jidjo5hKZC}`MzquoJRYl#)gh44n|4>Ax#)u>!GEjx%uHJ4!lz?#H8bTXkCxC)uHSAeLOJE3uivZ5e;5Qv5 z(pMqQ=ybZ!GnNAD|A?+-wOV_$TJ1O*M96PXX9748KcT+9es@+@R(KL8!w9b&4R=#h zQ)PO3I=>SkguZJpMU-rrKP2u?Zwj1FT5D^TVjE@H7+&84_z7QTVkne z*REYWdGh3i2?+^fY5UN3a!>fjIlL_n!JyFQlErK`*PcCl_HQdztoS|s+u#JB14cgemdIqVb9?OCzRHCviizm45i)vZ6#iXv6OTAAA`h%G2a%h!?U{Qy5BfcsiX_snV#sCf-jgfR^lz<4c6(t}_K!g#9@a>~BAi@OvKe>|i U*^zbxWdHyG07*qoM6N<$g4=KeEdT%j literal 0 HcmV?d00001 diff --git a/src/es/beatzanime/res/mipmap-xxhdpi/ic_launcher.png b/src/es/beatzanime/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..93d6eefd7afcf983ff15b0a237c245a0a0340074 GIT binary patch literal 8732 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 1) { + "$baseUrl/emision/pagina=$page" + } else { + "$baseUrl/emision/" + } + + return GET(url, headers) + } + + override fun popularAnimeSelector(): String = ".row > div:has(a.titulo-largo)" + + override fun popularAnimeFromElement(element: Element): SAnime = SAnime.create().apply { + thumbnail_url = element.selectFirst("img")!!.imgAttr() + with(element.selectFirst("a.titulo-largo")!!) { + setUrlWithoutDomain(attr("abs:href")) + title = text() + } + } + + override fun popularAnimeNextPageSelector(): String = "ul.pagination > li.active + li:not(.disabled)" + + // =============================== Latest =============================== + + override fun latestUpdatesRequest(page: Int): Request { + val url = if (page > 1) { + "$baseUrl/index.php?pagina=$page" + } else { + "$baseUrl/" + } + + return GET(url, headers) + } + override fun latestUpdatesSelector(): String = popularAnimeSelector() + + override fun latestUpdatesFromElement(element: Element): SAnime = popularAnimeFromElement(element) + + override fun latestUpdatesNextPageSelector(): String = popularAnimeNextPageSelector() + + // =============================== Search =============================== + + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { + val source = filters.filterIsInstance().first().getValue() + val status = filters.filterIsInstance().first().getValue() + val type = filters.filterIsInstance().first().getValue() + + val url = "$baseUrl/lista-animes/index.php" + + val formBody = FormBody.Builder().apply { + add("buscar", query) + add("fuente", source) + add("estado", status) + add("tipo-anime", type) + }.build() + + val formHeaders = headersBuilder().apply { + add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8") + add("Host", baseUrl.toHttpUrl().host) + add("Origin", baseUrl) + add("Referer", url) + }.build() + + return POST(url, formHeaders, formBody) + } + + override fun searchAnimeSelector(): String = ".row > div:has(span.titulo)" + + override fun searchAnimeFromElement(element: Element): SAnime = SAnime.create().apply { + thumbnail_url = element.selectFirst("img")!!.imgAttr() + with(element.selectFirst("a:has(span)")!!) { + setUrlWithoutDomain(attr("abs:href")) + title = text() + } + } + + override fun searchAnimeNextPageSelector(): String? = null + + // ============================== Filters =============================== + + override fun getFilterList(): AnimeFilterList = AnimeFilterList( + SourceFilter(), + StatusFilter(), + TypeFilter(), + ) + + // =========================== Anime Details ============================ + + override fun animeDetailsParse(document: Document): SAnime = SAnime.create().apply { + title = document.selectFirst("h1")!!.text() + thumbnail_url = document.selectFirst(".row > div > img")?.imgAttr() + genre = document.selectFirst("p.post-text span:has(b:contains(Generos))")?.ownText() + status = document.selectFirst("div:has(>h5:contains(Estado)) a").parseStatus() + description = buildString { + document.selectFirst("p.post-text")?.textNodes()?.let { + append(it.joinToString("\n\n") { it.text() }) + } + append("\n\n") + document.selectFirst("p.post-text span:has(b:contains(Sinónimos))")?.let { + append("Sinónimos: ") + append(it.ownText()) + } + }.trim() + } + + private fun Element?.parseStatus(): Int = when (this?.text()?.lowercase()) { + "finalizado" -> SAnime.COMPLETED + "en emisión", "en emsión" -> SAnime.ONGOING + else -> SAnime.UNKNOWN + } + + // ============================== Episodes ============================== + + override fun episodeListSelector(): String = throw UnsupportedOperationException() + + override fun episodeFromElement(element: Element): SEpisode = + throw UnsupportedOperationException() + + override fun episodeListParse(response: Response): List { + val document = response.asJsoup() + val episodeList = mutableListOf() + + val indexUrlRaw = document.selectFirst("a[href*=$indexHost]")!!.attr("abs:href").toHttpUrl() + val indexUrl = if (indexUrlRaw.encodedPath.contains("api/raw/")) { + val path = indexUrlRaw.queryParameter("path")!!.substringAfter("/") + .substringBefore("/") + "https://$indexHost/$path/" + } else { + indexUrlRaw.toString() + } + + fun traverseFolder(basePath: String, relativePath: String, recursionDepth: Int = 0) { + if (recursionDepth == 2) return + + val apiHeaders = headersBuilder().apply { + add("Accept", "application/json, text/plain, */*") + add("Host", indexHost) + add( + "Referer", + indexHttpUrl.newBuilder() + .addPathSegments(basePath) + .build() + .toString(), + ) + }.build() + + val apiUrl = indexHttpUrl.newBuilder().apply { + addPathSegment("api") + addPathSegment("") + addQueryParameter("path", basePath) + }.build() + + val data = client.newCall( + GET(apiUrl, apiHeaders), + ).execute().parseAs() + + data.folder.value.forEach { item -> + if (item.folder != null) { + traverseFolder("$basePath/${item.name}", item.name, recursionDepth + 1) + } else if (item.file != null) { + val fileExt = item.name.substringAfterLast(".") + if (!SUPPORTED_FORMATS.any { it.equals(fileExt, true) }) return@forEach + + episodeList.add( + SEpisode.create().apply { + name = item.name + url = "$basePath/${item.name}" + scanlator = buildList { + if (relativePath != "") add(relativePath) + add(item.size.formatBytes()) + }.joinToString(" • ") + }, + ) + } + } + } + + traverseFolder("/${indexUrl.toHttpUrl().pathSegments.first()}", "") + + return episodeList.reversed() + } + + @Serializable + class IndexResponseDto( + val folder: FolderDto, + ) { + @Serializable + class FolderDto( + val value: List, + ) { + @Serializable + class ItemDto( + val name: String, + val size: Long, + val folder: JsonObject? = null, + val file: JsonObject? = null, + ) + } + } + + private fun Long.formatBytes(): String = when { + this >= 1_000_000_000 -> "%.2f GB".format(this / 1_000_000_000.0) + this >= 1_000_000 -> "%.2f MB".format(this / 1_000_000.0) + this >= 1_000 -> "%.2f KB".format(this / 1_000.0) + this > 1 -> "$this bytes" + this == 1L -> "$this byte" + else -> "" + } + + // ============================ Video Links ============================= + + override suspend fun getVideoList(episode: SEpisode): List