From e3239091650b1e244c0c9817ca934709352df830 Mon Sep 17 00:00:00 2001 From: ObserverOfTime <chronobserver@disroot.org> Date: Tue, 12 Oct 2021 13:33:55 +0300 Subject: [PATCH] ZinChanManga: new extension (#9414) --- src/en/zinchanmanga/AndroidManifest.xml | 2 + src/en/zinchanmanga/build.gradle | 17 ++ .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2171 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1588 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2909 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4341 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 6915 bytes src/en/zinchanmanga/res/web_hi_res_512.png | Bin 0 -> 31206 bytes .../extension/en/zinchanmanga/ZinChanAPI.kt | 102 ++++++++++++ .../extension/en/zinchanmanga/ZinChanCert.kt | 78 +++++++++ .../extension/en/zinchanmanga/ZinChanGenre.kt | 27 ++++ .../extension/en/zinchanmanga/ZinChanManga.kt | 148 ++++++++++++++++++ 12 files changed, 374 insertions(+) create mode 100644 src/en/zinchanmanga/AndroidManifest.xml create mode 100644 src/en/zinchanmanga/build.gradle create mode 100644 src/en/zinchanmanga/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/zinchanmanga/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/zinchanmanga/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/zinchanmanga/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/zinchanmanga/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/zinchanmanga/res/web_hi_res_512.png create mode 100644 src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanAPI.kt create mode 100644 src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanCert.kt create mode 100644 src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanGenre.kt create mode 100644 src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanManga.kt diff --git a/src/en/zinchanmanga/AndroidManifest.xml b/src/en/zinchanmanga/AndroidManifest.xml new file mode 100644 index 000000000..30deb7f79 --- /dev/null +++ b/src/en/zinchanmanga/AndroidManifest.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest package="eu.kanade.tachiyomi.extension" /> diff --git a/src/en/zinchanmanga/build.gradle b/src/en/zinchanmanga/build.gradle new file mode 100644 index 000000000..2e30473f2 --- /dev/null +++ b/src/en/zinchanmanga/build.gradle @@ -0,0 +1,17 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlinx-serialization' + +ext { + extName = 'ZinChanManga' + pkgNameSuffix = 'en.zinchanmanga' + extClass = '.ZinChanManga' + extVersionCode = 1 + isNsfw = true +} + +dependencies { + implementation project(':lib-ratelimit') +} + +apply from: "$rootDir/common.gradle" diff --git a/src/en/zinchanmanga/res/mipmap-hdpi/ic_launcher.png b/src/en/zinchanmanga/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..98863e81b0aab397f470c18327bbf6e7313160c6 GIT binary patch literal 2171 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 literal 0 HcmV?d00001 diff --git a/src/en/zinchanmanga/res/mipmap-mdpi/ic_launcher.png b/src/en/zinchanmanga/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a17a6e17167114b7bb95b1ef0ecb75249074eb48 GIT binary patch literal 1588 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 literal 0 HcmV?d00001 diff --git a/src/en/zinchanmanga/res/mipmap-xhdpi/ic_launcher.png b/src/en/zinchanmanga/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..8aed81fd27a30fb8c348d2ba183e9e0785c162e0 GIT binary patch literal 2909 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 literal 0 HcmV?d00001 diff --git a/src/en/zinchanmanga/res/mipmap-xxhdpi/ic_launcher.png b/src/en/zinchanmanga/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2c0771c26d1972ae63a6cf4e3a633a35c48fdf7b GIT binary patch literal 4341 zcmbtYc{J4D-yge3C`~9)_9bMku?-CqLYVBb?<D(LD9T<@hOv!x>|)0DwMAe1Hprf_ zl+cWQ>`c$ZbIx<lbI$Mi=eg(exu0|Heed`6zW04UF^_ejObnb1004kV^C855{C)rT zrKctL%NmRI002vqCPWn$n6Z``VgmE4>uTlo?g=gb>Fd>P_$r`jnPNL>(p^>Ds6R_z zO<VfTfDF!63>~S3YX_x`y-x{HZDWN|4@3CS7#UUpi8Mak-R?5OE<vT*LGJ#8?W`#k zRD%p5XwYnE=aAR<xbLWZZh7h};JMd-Yz;67_OXE32Udzlj7c#@5G)4699H5!f+>82 zaa}d7C)EgDDJMTqM6WpH`tAHtR;IW$4)ayCg`mC`*QakOLE~5Kb=13lTw(EUZgkzc z%}W_x*mjBYZksElcr4tkl(p3?q266~KA@0Ba<O_W+R7t9KNuT*!9R!)Fuv%(o!=R4 zV?=eyoQX$4Rw@sOnC)9Q6=oklSvRxDdaaQ^MOT*MwG<vNI!0?zp0Y)kM|rV6_=~?p ztwOF6^TG$<r*4u6ra1_KyGLtLk&;ep4~wOMm(yZ#Y}j!~yz@(VOLEs<x}rmF&8c17 z(iX3KKn*Vk6cwQHd`Dq70j$&MdWn5A_0+Dk1KwT_NuV%R4g<i1Y(Rj4L=*0oDEF}C z3q^9sepdjOb;QXB(c@j@Vjuy4AkD8_4?;Zk<Ma`m9%tWd9s^XLwtpXCw6SOlFO`*Y z_Mz0xkG#be-YLj!w^uhb9q3!jx#gxa3J${@sIeO#esu+SXt#SxFoC%N6lt4n=G}WW zmAk(eqA{FaX*An<mnNyFvm*P@$F~{4_?pc&<KT2~MBMrV&r*t3G?)})iQMKpA-Qw^ z3!o>)fNST*U(a2C)gt!(&xi$*qgj$3{9GV(Q>R}Xd!oA1MR_POKobnQ{MwYKvyz(O za42Lrn`YYz!AOMhy#dhMM6d&+$(>3#jjajK8yee)6SlJfU^LCP;n|1@53pPBzv)bP zRHFVfA<~WVMfN8M(~@>^mDGd-XD@t&*&N7ltm1CEVzhUd>kc{!4eOw}skx!Ki?1%K z@*c|`5;X;*fJ2Wn3UWe)#|HHB5Z|mpa)K$p<L2~F!V+7R5WjJnd2jTT{a3}Dj9S2c z8;L${%qs4|6E@5xSBl6?mKK>hOg{GThR=MjN%**dcG3`k-)t{QSUz2RUEIqAw}1i- zM`hCZ4%-&KiN726axe<LI#RrG)yXA8Axr$31k#5ljktp=_q7=oja@!j`&mcqgPRv^ zt)VPHePmfHBky*ftu3@eEAJ6h{U~LPevKU7m&%MDtM6}U)g~I+Bz~UT#67C3*6Xav zVWim@of`8YsUwrQl{K&Rd9T`ghfGL8Be7Ah_M_0>S`T<EL173^l?)xhb!M32vS$sn zh{QiJ<o&CPL^PkhyYKIw-gtNuCXAgjwlCo-^hz6Dy?knt%1g+$k{n$lpnVKhySPe= z1Y{4Uw+G>3$eo>RKZT9{GCH;p!Oq=$tCH5-(V>;d<&)y-$VB{x_o)+JZN>J`ta45D z6J=(wX(8{vi$&o&M-1oq68*8$wSHfPV@U7~%L7{_u28~U#f5Js4Y9fd96$VVF~oZv zxPYU^m9Fgs;%Pqn*8Mo;Tu(cy*`uihb;jmex+e@Ud2<0gOG4kb!S^do{Lo32-StQB zs>4ofskkx%&7~t0(`)?S<WDNdh{V4XLSu)!?7o9g(u3ySO@Fz43H)h$%;WX_b))<s zrykZl{I4ORP@}#okKT4mrnvB4N%GgCmVULj0-g1Kx=tDBpMf6CC2T93aZ)e5Dmxv@ zM)^R^a%8Q0gJi9rsJHosKspA57oXTQoaD@lT-D;umwh`|Ywkatc`ZUy@=~=hRw$v5 zkS;PD<=Ik*b_j~KIB?8{P9<b3F#OcSwG=1WdOC%&XNuKe;qNpUv&%)hz3|IM5SO9~ zo-VhL#|2=kbbFEO^mMhFb;*7>AIy(7@z~Q@Lq3pY)rY+_d-cRhtCzC`g#1XcEv#PB zT$4v1H=eV$0{+D|oprF$-b5x{GF`;@HhojeR=RvAv{r7eY*O?({n7R+WZFrJ;kf3| z@ob^if}R#KQO$!*ZK=mnOq`D=ojXW_g8WC~WcnFN0Bkp<Cyzi&69EY-NE&y+k*Dgi z{rm?X#G#{3H?{}J{{E&0!Lv1YLu!Y&Ml9%bpUr`nFA)l=G0wdkbacIf+P;Aard9Ac zW=ud<jB<#s5y69<LlvqmHZed_RprrtI(%w|3R+4&my76_Y9}qop4*l=)tr#{toKR2 z<5&nryo#}Wg^I3MK$AG&injGs=f<wPUwLw3X+*gCFBH3=1DsCfywh)V`QgVp$NF)X zr&D}AYfhP&=-)rwZT_T>{S|qhRO7yBz};7U?ioV*ep#lIe+W9sk|AT!^q~44wUoQV z?Svf$%9!mG=26hV%sqYYV^gQ)@5lPJpRF>T_NK`R^SI|?8ju*?XCm+rqcR~zFmAHB z>=;%SheX&iE^*{VO=*$YflR}o0raEy-(QYT-QO4M1@7%HBhHa5V_7KQ*yga^sg02* zvwNPt)l5BY+oUfMsl^)HH%l$&doSeKW?eqo)U=f}GXzptu81N>1!sYt*h6YXY@>QU zPH~8%39K>xl`@RS1*QTvdoy2eJ6lynDL;w<I*MN4>+MS<t2f_^&Y$f2J(C#wG)rUS zB4faD#wTt^#^Xlgb4xI;C6CbU3sP~NS{Szi)5*Ebe>77wWo2HqOgrb$Fsn17@mHxY zFEs-T{1A1{Wkh&}PgceC=432%a;|2CP@`02faEu{*J`~kzVi|R$*z!OJjOqjzJQjd zg<{tefQWrC<{X=Z2=W?lpftmJ?q_bTGMqcopX`9}6|``~vB&hn)1pqBjCI-x%XYU{ z&`iK!Sz)u(7ti2%;M^u6iOjsy`LNv-<=fJ><^#$LO`AGPk{!Vw8C^y?0S!!nSY9IV zQPNe@eIr^AtKAQa=pPv5)iiQsh(+`z7M?j%7lva`8#H1DMd<l@)2EH`GM*Ls1_UMC znxom)w3ybr7#8J5zckZ8T_<--$Fp_DHpNKw)P0Q*q}9MqWE){ywxvoe;CS$pCAsMq z$FxQC_8PK-qY&?CTvqqq#U5j;@)areUTC8VN4A%PmW)1aI3j8}H2AT6uw3oC&sP6@ zJC9kzyPl7}qBq#X^r$~o)?uZ+$flVF$Hc-@uZC#Wy#hL>D)#=xF&tRzhmhBnXgDoH z`}~sV2JXedQ_nE;@$ORrOQ9Qq^<mU64D54?d2_EG4;4JbysR><LNU_3knH-YUz-HZ zRct_!lh#N03`S14Mly_!I?j`8;3Z7&!Lv71M=cAOf^M~Uc(MrTo8N{9M-qs=dBN&h z+bJO*&!7m~zXUTiQoGL~Av9S1GvQ+JprpY;8EW~vzJ(BBgJgfcnvRL1qhI`=^W;FG z)3DEPZgSl$n9K%gK@)a&iN^)nYLKa(=C3Y3IZOYX<%jP=-7wBlVHUw(;YNo--%~(I zH`S1LY9hfzY4;f;9W91AcX*#Ezm3aNpTLawy{_bOLw(gHSUuM0&K1Y5T?W*M8e>7H zhVY&sKYk_t6&WX_I!xi#)`KW?sHFVs!u)txs9dejTm0Z6A!Bf|!SCG6LX|R9g~z-f zX)8%HRjJA8o`(qLeW=w(+py52YVi6XNLds5BiT2$S#^P{LLm<IQ(P+K?@{2aRg$%S zDPkh%MGBd(9(wQUHM5n79R1i+47EeV_e|M4s!*2;pblJ^@9*ccriu<rYUc_C5{3=m zS_fwKUn8TtXng@wg;l%oAeZep4=Td=bG<AN`rDcKFw?ejWA;p;n3eN6`VNMJUAgHi zrI%@vB^$#go=<-sR2xAGb-dJSO4JplC$kD~fwW>Kg!h7R1qBJ}_(*hMZxZw0Em?$y z(+z7l0|?BVl1Po5YW^qEaO>#y2vdV`RrZZ#p~nvn4G>aZuguYWU8_R(by1V}S^f-> z+84JoIt-Nu@18j<G=@Z3Gc^sCk(0=Oe{cbV_NG%hdR}6yViTDMc4CxTO_;FqaZ8D0 z1!=M87!sJ8<q^7LTqrL)jX(S$CLit2ym+raZU~t7dn%I_Ic0gfeYMn5p%~Mx)*Q0; ze5Fe>k#fvY3%0vz6gxVr*H%ttf#BC2(a*^DIoMC1#y#}08bDgLoF>VYi#{e>21NYN zag*&ar%~$T(>zETQn~5~XDiQ3UJ8O)Z7aX9Z0N|bs&bId6b?-;V}5IKg<Qd;>fXuF zg0@U*q@2i#4;YYVpSVwzDR!k45NFHSLFNaAi(*;c`L31Z4Hgt}NoU-^!$^v2Xgnm- zuCnt2+6|qwx{0B$PHg^=*sKVt3UjXBLn!|FC={JI*z~q#NY~3HWxCA1!_<{bh`nM1 zyYt{)9OADi(gw}l-{fNV|6TF^pQUl?pDxOQcWr=DR=6q8pMS-%dwdpIxGN7{2w=^4 zDFKo8>Unwz6s=WfC4DvIWdGmw`fK25R{DcJn%;hhDBu<^NX?x82PENQiQK%awnU^C zD^<mKH!_#?-Y8xG0-&eB{+75#4=$Z-WToWs9eQ0<<Wha86-OqF;iRe{Xj9yY>$nNX zsr`G~(fj^d4xna?mqcqZmpDe8#8Syc)bhW2+DPXKpyw)3zixFQKPDc+5^nyCNn_a~ zrpPYlgsxGMeCb)LLX769u29Sa0jdBQWmbBywY>s{4(sKwqPV4LJ8C^9RdM5STT&{% z&rUXcT#GZfgf5E$JM0gSXkjao4X+Krg-Ze~t+=8aI<}C_!bn#tQdj2~l@!U^EX$Ru zVtQi<&-OSX|CS+l6AjW$h=mqezNY))HVc+$%0bCP++&HPip~JW5U+lfb?Utgwo;}p z`Jie<l?U7_2(RS}2Qs_)`FjT_GV_f12jpxn$V-N}V2QnMjPr@D6qXdkXV;=ruN^PU zX52!Qd|$ZNdg~Hg3%aP~q9`uig0knUVCz~iz?~KiapV?D?RJEOxh1Fqf@jtVmu9$* z2tP`LYA9JQ&N~8Z$T7HtG`6<3ZvFD*3q?Sr^}(iOye=X7EmZQ3+DYca>o?yF*S(#8 z3812+qB^EnacC@+oSCKh+U3dp*C2Qw%M6bhU}5bwOOPE)Fx84(a*T@&fY@-CzIlf3 z)@5-0TE(;4SxbP~{F+_mugf)5&qc!(D10fg{Ol{^z?B}%jW)16Ak!nj8?}}=txB^! z*(a{g5-#V=DbDuA!}%zF&H6##0oyTd<MXV#P<Xm~02}qEZaWDklCS{}LfP08Jo;IF z+WCxRW^(=Zq`$ns7mQbLr<!@ZR|Am8K-kYQ^MVxEz$mW$?*@nNwzghlSoHqbbcOso O1E8s{3#m}Ee)V4?4uX;Z literal 0 HcmV?d00001 diff --git a/src/en/zinchanmanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/zinchanmanga/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..ee9bcac78515609beae43eee636910f332246922 GIT binary patch literal 6915 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 Q<rYXoMOV4(@w1Ts15;5^{r~^~ literal 0 HcmV?d00001 diff --git a/src/en/zinchanmanga/res/web_hi_res_512.png b/src/en/zinchanmanga/res/web_hi_res_512.png new file mode 100644 index 0000000000000000000000000000000000000000..17f70e1d27ad2482f470dc7f58e9b94203a8e9bd GIT binary patch literal 31206 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 literal 0 HcmV?d00001 diff --git a/src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanAPI.kt b/src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanAPI.kt new file mode 100644 index 000000000..b83ddadda --- /dev/null +++ b/src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanAPI.kt @@ -0,0 +1,102 @@ +package eu.kanade.tachiyomi.extension.en.zinchanmanga + +import kotlinx.serialization.Serializable +import org.jsoup.Jsoup +import java.text.SimpleDateFormat +import java.util.Locale +import kotlinx.serialization.SerialName as N + +@Serializable +data class Data<T>( + private val data: List<T>, + private val err_message: String +) : List<T> by data { + init { require(err_message == "Success") { err_message } } +} + +@Serializable +data class SeriesList( + private val data: Pagination, + private val err_message: String +) : List<Series> by data { + init { require(err_message == "Success") { err_message } } + + val pages by lazy { data.pages } +} + +@Serializable +data class Pagination( + @N("total_page") val pages: Int, + private val data: List<Series> +) : List<Series> by data + +@Serializable +data class Series( + private val id_story: Int, + @N("name_story") val title: String, + private val slug_story: String, + @N("status_story") val status: String? = null, + private val name_genre: String, + private val name_author: String, + @N("thumbnail_story") val cover: String, + private val content_story: String +) { + val url by lazy { + "$slug_story?id=$id_story" + } + + val description by lazy { + Jsoup.parse(content_story).text().takeIf { "Updating" !in it } + } + + val genres by lazy { + name_genre.trim('|').replace("|", ", ") + } + + val authors by lazy { + name_author.replace(",|", "|").trim('|').takeIf { + it != "Updating" && it != "Đang Cập Nhật" + }?.replace("Author: ", "")?.replace(" ", ", ") + } +} + +@Serializable +data class Chapter( + private val id_chapter: Int, + private val name_chapter: String, + private val latest_update_chapter: String, + private val name_extend: String +) { + val params by lazy { + "?id_chapter=$id_chapter&type_story=manga" + } + + val title by lazy { + buildString { + append(name_chapter) + if (name_extend != "") { + append(" - ") + append(name_extend) + } + } + } + + val number by lazy { + name_chapter.substringAfter(' ').toFloatOrNull() ?: -1f + } + + val timestamp by lazy { + dateFormat.parse(latest_update_chapter)?.time ?: 0L + } + + companion object { + private val dateFormat by lazy { + SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ROOT) + } + } +} + +@Serializable +data class PageList( + private val data_chapter: List<String> +) : List<String> by data_chapter diff --git a/src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanCert.kt b/src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanCert.kt new file mode 100644 index 000000000..cc2254f22 --- /dev/null +++ b/src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanCert.kt @@ -0,0 +1,78 @@ +package eu.kanade.tachiyomi.extension.en.zinchanmanga + +import java.security.KeyStore +import java.security.SecureRandom +import java.security.cert.CertificateFactory +import javax.net.ssl.SSLContext +import javax.net.ssl.TrustManagerFactory +import javax.net.ssl.X509TrustManager + +object ZinChanCert { + private val keystore by lazy { + KeyStore.getInstance(KeyStore.getDefaultType()).apply { + load(null, null) + setCertificateEntry("zin-chan-cert", certificate) + } + } + + private val certificate by lazy { + CertificateFactory.getInstance("X.509").run { + PEM.byteInputStream().use(::generateCertificate) + } + } + + private val managers by lazy { + TrustManagerFactory.getInstance( + TrustManagerFactory.getDefaultAlgorithm() + ).apply { init(keystore) }.trustManagers + } + + val factory by lazy { + SSLContext.getInstance("TLS").apply { + init(null, managers, SecureRandom()) + }.socketFactory!! + } + + val manager: X509TrustManager + get() = managers[0] as X509TrustManager + + private const val PEM = """-----BEGIN CERTIFICATE----- +MIIG1TCCBL2gAwIBAgIQbFWr29AHksedBwzYEZ7WvzANBgkqhkiG9w0BAQwFADCB +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMjAw +MTMwMDAwMDAwWhcNMzAwMTI5MjM1OTU5WjBLMQswCQYDVQQGEwJBVDEQMA4GA1UE +ChMHWmVyb1NTTDEqMCgGA1UEAxMhWmVyb1NTTCBSU0EgRG9tYWluIFNlY3VyZSBT +aXRlIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAhmlzfqO1Mdgj +4W3dpBPTVBX1AuvcAyG1fl0dUnw/MeueCWzRWTheZ35LVo91kLI3DDVaZKW+TBAs +JBjEbYmMwcWSTWYCg5334SF0+ctDAsFxsX+rTDh9kSrG/4mp6OShubLaEIUJiZo4 +t873TuSd0Wj5DWt3DtpAG8T35l/v+xrN8ub8PSSoX5Vkgw+jWf4KQtNvUFLDq8mF +WhUnPL6jHAADXpvs4lTNYwOtx9yQtbpxwSt7QJY1+ICrmRJB6BuKRt/jfDJF9Jsc +RQVlHIxQdKAJl7oaVnXgDkqtk2qddd3kCDXd74gv813G91z7CjsGyJ93oJIlNS3U +gFbD6V54JMgZ3rSmotYbz98oZxX7MKbtCm1aJ/q+hTv2YK1yMxrnfcieKmOYBbFD +hnW5O6RMA703dBK92j6XRN2EttLkQuujZgy+jXRKtaWMIlkNkWJmOiHmErQngHvt +iNkIcjJumq1ddFX4iaTI40a6zgvIBtxFeDs2RfcaH73er7ctNUUqgQT5rFgJhMmF +x76rQgB5OZUkodb5k2ex7P+Gu4J86bS15094UuYcV09hVeknmTh5Ex9CBKipLS2W +2wKBakf+aVYnNCU6S0nASqt2xrZpGC1v7v6DhuepyyJtn3qSV2PoBiU5Sql+aARp +wUibQMGm44gjyNDqDlVp+ShLQlUH9x8CAwEAAaOCAXUwggFxMB8GA1UdIwQYMBaA +FFN5v1qqK0rPVIDh2JvAnfKyA2bLMB0GA1UdDgQWBBTI2XhootkZaNU9ct5fCj7c +tYaGpjAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHSUE +FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0gBBswGTANBgsrBgEEAbIxAQIC +TjAIBgZngQwBAgEwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC51c2VydHJ1 +c3QuY29tL1VTRVJUcnVzdFJTQUNlcnRpZmljYXRpb25BdXRob3JpdHkuY3JsMHYG +CCsGAQUFBwEBBGowaDA/BggrBgEFBQcwAoYzaHR0cDovL2NydC51c2VydHJ1c3Qu +Y29tL1VTRVJUcnVzdFJTQUFkZFRydXN0Q0EuY3J0MCUGCCsGAQUFBzABhhlodHRw +Oi8vb2NzcC51c2VydHJ1c3QuY29tMA0GCSqGSIb3DQEBDAUAA4ICAQAVDwoIzQDV +ercT0eYqZjBNJ8VNWwVFlQOtZERqn5iWnEVaLZZdzxlbvz2Fx0ExUNuUEgYkIVM4 +YocKkCQ7hO5noicoq/DrEYH5IuNcuW1I8JJZ9DLuB1fYvIHlZ2JG46iNbVKA3ygA +Ez86RvDQlt2C494qqPVItRjrz9YlJEGT0DrttyApq0YLFDzf+Z1pkMhh7c+7fXeJ +qmIhfJpduKc8HEQkYQQShen426S3H0JrIAbKcBCiyYFuOhfyvuwVCFDfFvrjADjd +4jX1uQXd161IyFRbm89s2Oj5oU1wDYz5sx+hoCuh6lSs+/uPuWomIq3y1GDFNafW ++LsHBU16lQo5Q2yh25laQsKRgyPmMpHJ98edm6y2sHUabASmRHxvGiuwwE25aDU0 +2SAeepyImJ2CzB80YG7WxlynHqNhpE7xfC7PzQlLgmfEHdU+tHFeQazRQnrFkW2W +kqRGIq7cKRnyypvjPMkjeiV9lRdAM9fSJvsB3svUuu1coIG1xxI1yegoGM4r5QP4 +RGIVvYaiI76C0djoSbQ/dkIUUXQuB8AL5jyH34g3BZaaXyvpmnV4ilppMXVAnAYG +ON51WhJ6W0xNdNJwzYASZYH+tmCWI+N60Gv2NNMGHwMZ7e9bXgzUCZH5FaBFDGR5 +S9VWqHB73Q+OyIVvIbKYcSc2w/aSuFKGSA== +-----END CERTIFICATE-----""" +} diff --git a/src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanGenre.kt b/src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanGenre.kt new file mode 100644 index 000000000..c69f09a1b --- /dev/null +++ b/src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanGenre.kt @@ -0,0 +1,27 @@ +package eu.kanade.tachiyomi.extension.en.zinchanmanga + +import eu.kanade.tachiyomi.source.model.Filter + +class ZinChanGenre(values: Array<String>) : Filter.Select<String>("Genres", values) { + override fun toString() = (state + 27).toString() + + companion object { + object Note : Filter.Header("NOTE: can't combine with text search!") + + val genres: Array<String> + get() = arrayOf( + "<select>", + "BL", + "Manhwa", + "Smut", + "Comedy", + "Romance", + "Cooking", + "Korean", + "Japanese", + "Manga", + "Manhua", + "Webtoon", + ) + } +} diff --git a/src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanManga.kt b/src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanManga.kt new file mode 100644 index 000000000..27bf35985 --- /dev/null +++ b/src/en/zinchanmanga/src/eu/kanade/tachiyomi/extension/en/zinchanmanga/ZinChanManga.kt @@ -0,0 +1,148 @@ +package eu.kanade.tachiyomi.extension.en.zinchanmanga + +import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.asObservableSuccess +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.MangasPage +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.source.online.HttpSource +import kotlinx.serialization.ExperimentalSerializationApi +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import okhttp3.Response +import uy.kohesive.injekt.injectLazy + +@ExperimentalSerializationApi +class ZinChanManga : HttpSource() { + override val lang = "en" + + override val name = "ZinChanManga" + + override val baseUrl = "https://zinchanmanga.net" + + override val supportsLatest = true + + private val json by injectLazy<Json>() + + private val apiClient by lazy { + network.client.newBuilder() + .sslSocketFactory(ZinChanCert.factory, ZinChanCert.manager) + .addInterceptor(RateLimitInterceptor(3)).build() + } + + private val apiHeaders by lazy { + headers.newBuilder().add("Origin", baseUrl).build() + } + + override fun latestUpdatesRequest(page: Int) = + GET("$API_URL/latest-manga-updates?page=$page&total=10", apiHeaders) + + override fun popularMangaRequest(page: Int) = + GET("$API_URL/all?page=$page&total=10", apiHeaders) + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = + filters.find { it is ZinChanGenre }?.takeIf { it.state != 0 }?.let { + GET("$API_URL/category?id_cate=$it&page=$page&total=10", apiHeaders) + } ?: GET("$API_URL/search?keyword=$query&page=$page&total=10", apiHeaders) + + // Request the frontend URL for the webview + override fun mangaDetailsRequest(manga: SManga) = + GET("$baseUrl/manga/${manga.url}", headers) + + override fun chapterListRequest(manga: SManga) = + GET("$API_URL/list-chapters?id_story=${manga.id}&id_user=-1", apiHeaders) + + override fun pageListRequest(chapter: SChapter) = + GET("$API_URL/reading${chapter.url}", apiHeaders) + + override fun fetchLatestUpdates(page: Int) = + fetchManga(latestUpdatesRequest(page), page) + + override fun fetchPopularManga(page: Int) = + fetchManga(popularMangaRequest(page), page) + + override fun fetchSearchManga(page: Int, query: String, filters: FilterList) = + fetchManga(searchMangaRequest(page, query, filters), page) + + override fun fetchMangaDetails(manga: SManga) = + rx.Observable.just(manga.apply { initialized = true })!! + + override fun fetchChapterList(manga: SManga) = + apiClient.newCall(chapterListRequest(manga)).asObservableSuccess().map { res -> + res.parse<Data<Chapter>>().map { + SChapter.create().apply { + name = it.title + chapter_number = it.number + date_upload = it.timestamp + url = "${it.params}&id_story=${manga.id}" + } + } + }!! + + override fun fetchPageList(chapter: SChapter) = + apiClient.newCall(pageListRequest(chapter)).asObservableSuccess().map { res -> + res.parse<Data<PageList>>().single() + .mapIndexed { idx, img -> Page(idx, "", img) } + }!! + + override fun getFilterList() = FilterList( + ZinChanGenre.Companion.Note, + ZinChanGenre(ZinChanGenre.genres) + ) + + private inline val SManga.id: String + get() = url.substringAfter("?id=") + + private fun fetchManga(request: okhttp3.Request, page: Int) = + apiClient.newCall(request).asObservableSuccess().map { res -> + res.parse<SeriesList>().run { + val manga = map { + SManga.create().apply { + url = it.url + title = it.title + thumbnail_url = it.cover + description = it.description + genre = it.genres + author = it.authors + artist = author + status = when (it.status) { + "on-going" -> SManga.ONGOING + else -> SManga.UNKNOWN + } + } + } + MangasPage(manga, pages != page) + } + }!! + + private inline fun <reified T> Response.parse() = + json.decodeFromString<T>(body!!.string()) + + override fun latestUpdatesParse(response: Response) = + throw UnsupportedOperationException("Not used") + + override fun popularMangaParse(response: Response) = + throw UnsupportedOperationException("Not used") + + override fun searchMangaParse(response: Response) = + throw UnsupportedOperationException("Not used") + + override fun mangaDetailsParse(response: Response): SManga = + throw UnsupportedOperationException("Not used") + + override fun chapterListParse(response: Response) = + throw UnsupportedOperationException("Not used") + + override fun pageListParse(response: Response) = + throw UnsupportedOperationException("Not used") + + override fun imageUrlParse(response: Response) = + throw UnsupportedOperationException("Not used") + + companion object { + private const val API_URL = "https://api.zinchanmanga.net:5555/api/web/manga" + } +}