From 35673b2199adf0843f629f3c2b7b6ccec9a78c78 Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Mon, 15 Jan 2024 11:18:47 -0300 Subject: [PATCH] New source: Bakai (#270) * chore: Add Bakai base * feat: Implement popular manga page * feat: Implement (basic) search * fix: Prevent http 429 - Use stricter rate limit * feat: Implement manga details page * feat: Add single-entry chapter "list" * feat: Parse page list * chore: Add source icon --- src/pt/bakai/AndroidManifest.xml | 22 +++ src/pt/bakai/build.gradle | 12 ++ src/pt/bakai/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3549 bytes src/pt/bakai/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1847 bytes src/pt/bakai/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4759 bytes .../bakai/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8115 bytes .../bakai/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10538 bytes .../tachiyomi/extension/pt/bakai/Bakai.kt | 160 ++++++++++++++++++ .../extension/pt/bakai/BakaiUrlActivity.kt | 41 +++++ 9 files changed, 235 insertions(+) create mode 100644 src/pt/bakai/AndroidManifest.xml create mode 100644 src/pt/bakai/build.gradle create mode 100644 src/pt/bakai/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/bakai/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/bakai/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/bakai/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/bakai/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/bakai/src/eu/kanade/tachiyomi/extension/pt/bakai/Bakai.kt create mode 100644 src/pt/bakai/src/eu/kanade/tachiyomi/extension/pt/bakai/BakaiUrlActivity.kt diff --git a/src/pt/bakai/AndroidManifest.xml b/src/pt/bakai/AndroidManifest.xml new file mode 100644 index 000000000..bbd136b36 --- /dev/null +++ b/src/pt/bakai/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + diff --git a/src/pt/bakai/build.gradle b/src/pt/bakai/build.gradle new file mode 100644 index 000000000..7d94eb97a --- /dev/null +++ b/src/pt/bakai/build.gradle @@ -0,0 +1,12 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +ext { + extName = 'Bakai' + pkgNameSuffix = 'pt.bakai' + extClass = '.Bakai' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/pt/bakai/res/mipmap-hdpi/ic_launcher.png b/src/pt/bakai/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..c837ccb9fefbcfa0c4f89a3e52017c81faa2acf3 GIT binary patch literal 3549 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 XD+U<-bU0q$cFOgS>s1k#k9SwxPzklV67cb)I zz6%RR0Q^6)M~@yA-ki7Ns2v83ZT}%T25=J4_2tW#Khw`jeLffgaMDH*fO5Ugjha_+ z-kXd(<&Twp0uW8lIJgc$!)+Z90NuNHFE8g(+DkGz#5|3~zB>?Q%Q$_Y;iYA1PBnDrTes`DyN_>#Pu-I9_LwItRgWVPa| zOG#Ra&nm08w*V*u=-RcbOAdG&TosU8^i5WHPx)jUfC>Y~=r;D@y-=gOzN{f``zYR9 zku7BaUAlBpV!+&aSEs$PXJ<{Z4S11Q%$dOpQcrkvRKOgTud~n+E^YcS~em)*Pe29Jf z_R0O(vu9)6xN(>@YnJ>kEiF|`;-sV`VIVs@8*}E&!Pl=}asU2()YQ}npz!c;3>!Ag zMIvLyjFEw9%PUUvfK#VV#k6VDx1GUX?Mq z|H6d}F?sT2j2%1HHvk;T_U+qa<;s;ZSZr)8a&vR>>C-13x*0bp7)GBQ9XB8kZ7&z~iNtnF2+R^ig6OCpOCCr)6=k|nr!@uGmKtgOWD-McZL zbUtt1JhW`t611NO%Zvk{pJm36ACJ9z_lncco;?$mjvYIO)2C01q*#tqrcAL1pmXQW z!T@WUo!z-}rz95x;Ie)DcF>6p8#ivmfddB+8X78z#)aiEc<^8>TC_+2tY5$0$<&=Y zcd%i@20VWJSne?>27Uedb!WTHn>VAnx?0BIAoc3i3+d_U_5pB|)~;O(Iva~2F3iO8 z<;x|itZ&YX3l}cn)TvVl2?;^Je*Msz#TetkSMZj zm;s(K9L7abuV23wkjw%*!Lt?zfCIv|7(Clyc6d4+K76?JfBN((E?>TkfPeszOwXP@ zWfmkgNL$+gctCbMIXM}@!NG`$i4hrX+O!Gx?%k7tZr;3!j~_o`&z?Opi)h-uapQ)x zqsc&6VOeQ~+i+4cQ|s2P6Pr7B?2xGQvsSHI;nAZ<7%^gmuuO}peF-HbBnSgc9Y>Lq ztDv9&*REZ2I?2=PxpU`4`wU3GqH>funky6)-4DC_B|BSl<9N#J07cI7M5dR5egG99O>y2<4tN6K z$x*#b?EY3^+-C+nZHZMFX=>!PF_ZyN;&?sOTggX7O2&ki|5UBsG;7bi1IVGb(K(1R z0#ISVMKbi-sew;hj^d30v&q5io_7F^uhXMwvGSP#yV_TE-c}Op0azuMH&#@o^q&Br zMaq-`RWMePF|uRFd0PzV0jN4{=A0)WcAd8cATBQMn=#PTsOy2MBr(rqQ3T*Gx`umN zT)gE#(;Ro7RB60w`pgthcKQ2&Pi+NCF3n3L+*1QA}l->JVc4-QJs-otf^Lo!y0c*Hu$@JJa#|{iW{dnQ5XLQ&kaYQq|TQ z8&{14R9Ofb31}ps$_P}s`9=+BB%sO&RJr*^4OqhofWS4D#G%r8juO+Ve0lRXQFUp+ ztC1EsC~N-GXqvhbb#^t&>;-)!fpWs~GJbpaY9=691OO%^n3*6hnxty=x(yYIgHw;T)eL_mf$ zxe@^QP50VsudYp-HhuQ5zy9jEeED)+d2oPX=fd)&8MsT`Ho)WhlBBFRFGx49tySx; zyYAFw%a-+>JbChuateT~B)AYjp4!fxJGa|ni!CMy_*mzhNdKTe|NQfsB;ZGBhZ zi7N#Zn=oWqcgvP7Kb$sgS|4e1ksQmg)KR3{2*CC?m!r)NJM1uX#flYcg@TqlS=2@; zDxZ{`H2K{%vDnwenYP;6+IixPyGi}?rQ}jkt4Lp9BS4!UIqD?xnG*%5i#CKwK$cP$ zB*0d8us^o^ae#-Foi%G#XK7=e9E;=3kP88=q=I(aZoBPl7Z7c#9%aIk0FXx7OVP$O zeG>w@s2QpNvLWYXc~fS;3uuq*2m!WsuEBN_%6V>nt8(0&- zPeb79Nr1-z=nk5DbpgjTl#5#_Uzd#MPxSxXX2~rH#s;IRQO;_O#9el4?XbO_3Y;{#92OQoVf+^GW7eAbfh zVtNXBJbuAN+T%1hu6#uZNNbKinNdNnKSC@5!wq9U98guvkj zNGagEfZ}3$T%p{Ak|e@U8T0)etUJvC6}nL zzy7*NxM{a_>(*+?k|oM)l?(%4?q#UKg9ocuUU@}5@x&8FwzfIdY`B?Y7&B>OAeV)6@kQT%hj0 z`)+-Nf#0c9C-vfsFRFFcSw~+!@x&9=d+)vH12fpy7A;z+F=NK4?%liVONSqRxccm~ z&wOQMGp?F6X_6lAqmMqSuDId~-}Rq<`YGF)urWafI3#_@kRiHrvO~CN@L?z3c;gLq z_St8L=GFD)Rcp^Z_f+@ae}5q#0A6&_MFG%OsnMgKQLuXDwE>%Y#eYE=Gi!WjcK(hPx?OVum@x>RbXP$Y+Cpc&~L~gLb2Kw5C7hYIi z0=C?8OP>z_{8LXo)i-ESJN4$9Z>l+S=BNb=7O0ggS8544?zrRBrkif6L@KnVgh{G7 z*Rf+qJs|#?go(k7ki42Rdh}>bz>`ltsjj^8N?)}I#lsIjtajUNH+>%Scg7iKs0kA$ zM1Y^$*xRR1A2n*!D4$S4Fy_eHKIZoQ_utq3eD1mD)cNP1@4KG41_TM9qr-;%OV!jg zRpZBxSNGj_pZfIEPm4?ozTmOP9#h!V7hZTl+hT7Dnj%ciK?fbA>%s0KY5Y%nGiJ>2 zl{Exl*D+b%bjKZc=z0wJ0|pGx!eNrPUE|X_bm*X7dg&z%s<-{=)2FL__ubbwHni*G zk3UxJ+O<#x5aOFZMb z;f5PjzkdBR&}ffruvItRbdxS8I|KC?Olq~(TI$oulhs=C7XiEMvdeq~m4$$yw4#DY z!0x;6uH?A^-8X#0!3Q6#0YmypGiT1!{=zu2Fb9l8z542_s?++NWM9t;b?BjoDkSgO zXP?!B$Hrp{yy>;qUQ?TGwwXfOIcjQZG!e9q3Bv3YB;RxIA}s2W-QU_@P>zV}u)_}1 zj{AcTKG5gzb!fOr0MBm(?V*PrQdeJnb$JQs(WASFu79i5#EBDCn>KBfJUgIm{Qmpz zucaI?8`3IK>#^#qufEb!D7%JzAetX&im{`^M~qPSh*XnKKmBwah5|NVdN+T)_10Tz zqm4Ey5J0qazySy7a+oiKfIQw5Mm}1DrWt1q`BSG()x}{kj=up5Qb&y(r54pMQnEwaSMHs6-qBGACP<#%(RSLTL4yWq?FoWkBLUk=&rW*U zz*OFR^UYe)F(=-T64OGTiSv!0G4qcpQ>G|F)_d>0S6z4Ab-F2|Xk{m0z4g}9(uI@s zCM2)EzFvoXfBf+WcZSsb`SXr;Z^liWW_EUfV{db`*<|5Z$ zf4!bea!rGrp8%pIl*jzta?35bGWo^6%n1+)^J&1zC!eex59ya*eo>es;$ozm0W4ay z$Txd5DocJO&e&5~W73j}8NjEUbka#aLis_o(Y}41Ow3MFAAR&u5dq!}VCEtw58xmJ zz@nBTi1E)m?>t=$hZ~&G?YQHPx_<}}|07%^OfLjLJlb>Top<{BU3LP9=S^pkHU?^> zqXq=1;J|@8N+FcQrjnQ&nD7t)SXW{CkEy}lGs$Y-zI~xu z+Jht`&DdaoAW<*iFpDN2@XpR5n>H~cULiq?uem1o+#wOrrI%i++eXrN-g##oeR)kA zV=#UNe+2;$L+}vvH)YiT0Du4^t=P$llO`7JoR+5rwOSLV0tk+kaBh|Wf}9c6m?Z{c zZesSJqxF)?3>%V+lrmQ!jgY9xYXa~!2OfB!Vy(y!gnefwY(ioB1Nob8zIlN_q8*%i zjwLw)D=gkM9|&Mc1EE5@$BrHAlRra1Z+Sjod=}3Kh-CVFfR}(n4mm_mT1-M}Fe^jE zl(`1P5rBmM z`s=TSIROi9@=Ak(89@42wZu^y^MM}-Tfro9!kiF)6XvoGL>c~XDP)}|=8kJ#0`Ni6 zYdlKrw9`&{MHQi$GG(eP$o16@nqVN90G0Mxk{~2znHz1QJbnZXr9YTPv#7^96f@_F z62KCK@c~TXnUNlG#1VRC=uJ3hY%AfYH!*qX-CGnipNOPTab}g?wRbKvU;x3iP|hrj z84bXZ1CYrZ1eNmm7928RBQs^zrRb}k63BIggY~SSFQe?n8*f}#!p281Q${0=Im5{_ z7br6UOvG|ZPNy(23_L0!J=o@P|=^w1B9F={R7Z;!LoDCL{;~19|-M$F&0M3c?<< z7R0KkEBNHYN8yvO>DYI(kQkJFZ=FO_%on^faeNBx;|uUr-c)uCi0f<-8ZIYnPhf`B z5k;2G6vat8*P>?4k;4etgIYEMq6Y1Paf6s6(hViz>P!N17KZ)6LGqE|4s;&VxX?G!~+!|2|_)+h|sHh3@cESa4n-g`p zo|Kd%QB;yK*tDVS8jz;5wlZn2CjmK$AFzQOcO3#`Gvr*kDU;3XYGidYRTydmHI394 zYhJNINJ5G~Zwf~j!bIj8kc5CNK)3mbq^77+l3z9-U?ad4bQ`c~G{RPfzJj>3h3UlnQK52 z0+MKmEpMeXqT$_AtEm%?Bfth?P^w(=N9GZ$waUAvYVhN0+IsmDwVc+(`rOH%uQIGnP`AiTzGf1?Bh&mg8bdG0jhKJ zn&Bp~ADoDMyw#Q1|0x2TK+hv$%UkO8N&#=$$w~uw;+oByb+S8bnrsb;-pDDL!a<5( zIky38lkA4_wiWuyQ6PObIw}hQ$+ib+T=HpzM17XIeRO0o^9;QN*Y1Q@P5?<5@SzhGZU@ zkx!VE_5}^|4Vl)m6Rx9dNPS+mdGl=)YjOoV38+cyw05!#8DvZSH}bFvd)R-MgMIY! z4VmaT+V+wMuA4}xPWC}=SyxwguaM9+_8Q5=cV7=4NLtMB?f{Y;7dw4;I?vf=&){wW1H1BJ4l`m>6$+uElVMTcLr2ybE9yRt2#r>&KP-;{=ZT^Ppo5l03Ycu={sU{m!Ww{fCwBjUspmq%m+Pf+LZeu zS^kwl8RJl~>KJ(LImz7TB;`QFaI%06=p1A*A90JF*w{hKHRdG&ZD^s^5v};EK!C|p zF(AsWd{jRZf$puO5xgo>-$+0s0aZqz l%FQ=wKqCQFMxe^g|36<|TSCt3+Iau~002ovPDHLkV1oLID(?UQ literal 0 HcmV?d00001 diff --git a/src/pt/bakai/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/bakai/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..475f77355b2727ca40252bd90d3220ec0e9318e6 GIT binary patch literal 8115 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 N002ovPDHLkV1lcDIh6na literal 0 HcmV?d00001 diff --git a/src/pt/bakai/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/bakai/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..533a6e19a27dfbb7060d4b45d229ceee011ad808 GIT binary patch literal 10538 zcmb_?^;cB?_w}8j!J(y78U&PcgGA$i6GrA4bt5uLpRbrba%%ye!l<0 z^TW)nJA19W&OUd~dF?spd{#eu{Bn$sKb&J--s)rA?*><^0jgpZi^9dO5k7tPESJ(1V5jun~-KV@9g>^nwxfSw( zfQ*iqaaFPPNSV!{G!gfc^PP!^xk}T4Uu;@=3j$BGQ=&SL&^WxrxeWG}q8qJg=I}B- z@BYRwH#}T!L&NoPDFU{7@$(&VHyO(xYi(xhxLeN0pEma)m_9}dIvdy5jUXdR=;!l$ zD#t$rIJL`ucSL7x5_>C8<);lRIUqUP36~&mWO#B`GfPE zo-@|z!md^VJUr1uiLV*v?V1j*KO|gbR9O8jy87g?8aTaay}*Z#PKr5xs`KCqZWnm8 zG=@tYBpUzpoUFE-P;EMaQ_9=7-fU`?X#~GuqEYb@u{Xh1)NIV&P-DW-q+w@So ze@YYS$|MDgqRE(9t7Dvig0(d^ z6-7gLe@>w}kI(mKXImp9X2YqToo}{Mop;GF0m%}&0vsSm_?Rahy1tzqVbE+gl+0^a zzZ%r9&WIJwXf?pxfJt{s0RF|-`cZCfz41%9AvnI-tdhKKr@`2L(RF&r)9ZW&hpT>N z!Dmzs2a~LO>i$jEUl8Dt=tB#HQMrstxu^1)475>kLt5Iawe9`MvHQ6)C%)0WnITk3uL}0DbWb!cr(X5;`PqoXlj%*Ppb%a8 z2!2ja@?-`!Fn?vBRK-#8t+&SlbS(t>D z_sv}Xas10%wxmC$o=eT19}Hw?dEI{xyu@de_tysMm!Rjp3=yJ^JL9>rqRJ_Zs3nfp zH#xuGCTI6O5-*L<_@MxMi?(%(23{xKq#3W#ffxSzFXCwW<}<*6)(zXKUo-TP*Xy_g zMVm7x9qsh|e5&6?MbunjH7YDI3U>@0h3rHwSMM=Pht zmHDPUN82xo%sEtiCo)r~Poo;ZbrvH%} zEa{bp4CnH+nL549*Y>eW{OPq$*7lGCH9&Utc=Oea#-SagyUEgA^+hb2F#tbOfi7}$ z*9x6n^&DJ#*E zAf|gcO=H+UC}JNm_iPGcS28Kb?|%lh%Yv%N<7rA>1H?OOkG$4x50`i5VOehD*IJO@ z^9ZI7iVrHDP(`lsM!uDX&17qmuw2O;DK|yFBC6zQuuA_^4^S@aHJUfU&<9c2i@9Zb zn}11qmOV^(@b4-G4CAv`Y9miUFzmc0nhNCH+$-COn~7*VS4 zn6mzi3*@eABMt*kRQlw`bKzYHB}3r$U#Vt8WSG%{ovt7lF(xqh3=j=}AJ_QoCd#ix&1HaLlMQ=HP>&#gR2ZX? zqGyF=tl5&V1tX2hmGY^z(_^D29u>d{Qtbc1|2TEG%>G6Z!`16JviB&(-3Xw=TEt}E zRPLi#O8XVH8FkAq`S&avnVSV7SQE79- zh3My7AGLyEjC6`pbAAV+6pgB5ldmI!e&g%lLwpOyFuA1FKpK4+ROOAB!q%QG09HvFbji8yeSBQ0&~~JZc|hG|E}}vOUP)0g4_fyBHe$yeF)jKu3ZnaS z%nyF1__q3<&-(W_xh@&7|DWvXyI^cUr~i17AUc+mf~omll*oEB&LYQ;lT3?UBKb{@ zYu>pve6!6Zw{97$H2WDl)(bOZQmcCk<84Njuy>!{D2m=@L3x17K8Y~b4+(~$hKb>3 z%C&xE9M6GhLg_f+C_iNb={RJSen@sbr%;jbhK3JDUA4;r;jeSa+lCAHLr2Fgc5=)U zZuukQJ&-Nq;wb$GgQ!6dUI^tYFk*5 z;VodviA--~-r(nm14AIpQjt)$h~)>`4>x^e?NgzaV<2xe!-a&Oi>B=#DI*0EO-#-! zZW0z>t11lPhNu+n=e)^zR7ELJ1Ipi&{rcnQI#xJuF(5GYDtug8i;+_eqOZ?a2w%2D zT$JcW2hJ~_0W;o5E!Lj2l7#PA1bgOcEVg%lMTNEDB1*pnpEncTinS4&Y$J908@Fqk zwRV~z02K(QVoEmHr=7v1!)l^TF+ND%&6zk=LWA)|OqMymAdEmqQpxhW5&Q<; zi{n(L555p!CyQS_WR-v?4@(cChNOQwHpnoh@Sp}X&CG{-H~mThLm^9*R zGZ0QU@JuFqo6Mf3lKFt5+Jz94&xets(D3Y@Fk`Jf-lN}WV#9y_G^4$n>8TvxYI?a%9s2eMiRp;fR8{5um6Eyh*6@(u z!=9menb+T9q`$iEKH9L&1Q~Gv^!9a&ZrvluP~s0-t_)@m?Auu99eb#MJpHq9pB)Ag zxJMq5QJF*U5wukU+-;(FBhW{!dz+<~x`~W|32(7BpLTWIlCxwdUe#}j9eJ`dypj_! z?T_vJ&)zv@-lSN!jBAQ|!sF+MDl=2s+tJ|4E?kk{M*j3IS1m_F;&-znp>nxsoM-RS zglk@Dr^j7PjCP>V9K&poe&J(+{nPHdJ^!#~(5_(XN%+eV61ex%Roj!PJe8wtt;^2% zDi~&ce$~7sR@H?kAu4j*j)H?|pHVN(vz@ChREJ-+UbXC}9r>8=MB;b3hoczz?I;`e zAG*~wsjOtQ{Z11*jf!agi^)!6vkC3MF^Cj9`L6a7C`bCp&XDyQm1b^0%=&g)UP7;T zh%7hhF;+{pPyD7&?R}_P`q@;$<-WOui1(1SftCq>diHG)~g$I}F*7Ja0JYk5#Dcf&IZsOX{bHo0n?ZmGOmetMksJ#@~n38r=% zo$+FVEIs`&y#E3M$HXUsC`{)E^=}he_D#uy_G(@Crk(?I)J0Z7wD4Vu&2;a>B+wUI z-sbej^L+C%@5Mc4aweY;?J~cMVjXLC2A;FQ42ibm1+wyaRk4f7eOr6)l>VK;BwiMg zz28-pXgDNc6WRIl61QWsM}AjL9cVDycS!pJfDtTT|w1nklm1s#DbmD1zuM7U)%TdT-EVNWybL=y*GE0}{3M{Z z9_8_rM{%|mw}gCvI(g4qUH;Z>&MzLi&DOPEl#F9`C%QKysAqTbGfH{Dv_J?s-NKf5!s2CZ-Nnxaq|dK17e$cIKG*$}r56*?+Y3H=jLjF#jm1k@2^QP` z90#`+1`$~@?vyTum~3T0{h%l-T<#6ZrsTwUU+LpK39oiE+WX@;sy^B^ri~Gj`DHF4{^Yw-fenJhI{lbHvrAVA~t-PNH=6zP%tyyWT_h zw!6Zxb_`hdPvIh-uQS#QzE_Js_`Zrom+3n&Eg?L z**AQ;)%|>)gMpbys}mha70YZikNnBZc@Y4ii$~r&iu5!7kteE>2eeOVHwy% zb!`u}I*sUfyNIXj9tn8@#cOYcrags;tIvEf6Jlh3j|kbc;K=jWi2oi6Ts zd)@V`oU~>8?OPRz90JhsBTJf#rbf0vxHeX|qX51&=CQ~@^+YIkT(LG$_yXYphQxKp zJ_GHIf|P-&i7c^n>mm)ZSeYS{x~!a_+#l>rcXh=tDzSsjX1vdv;`lo)rHqc;UtM;h%js#B`i@^8}d8xP4@Q#HBAMsgB z>G7!6@P3UnMk$Od+yqmW#mR7b{uk>wxQLrIT6@TjscmrD4 z%(m07J(|`e#p7l*ztb2FXFnMZF~J89*B7xLr*iPrMW1d)xGz8V`hOE`O7fNbE86<) z)e8XuqkKDY8ebgX>T@sX$Y)E0w2~nWc+gp;74G-_S4OHZ#E<>EcM3-ep3d_nOjDJX ze9ne))3vLIQ-O_2<~rX^-i$s~@tgINr_B|(0nRk}q3@CR4=o31P&TxQ9`6bpgN?=; zAGgoPQ;3bBFqGLfHY}q?QYMyuu0Fpdbt<~mX;;N~WG!6^pSvRv43W~16d3{R*c@ozj8W=95?_8XT^lhtfO=P`=36B6sUwE&ou729y~Ro8zY70@ z=hxyZn@%xv9JekRt%lc>4#Yi;9C+2IllN8mYUr>uJCKV~+NIoBdV+#X_fFf>Ls(G4lr00I4yWX(Dm>v=iW_$asFkR@U`ymEa^h3 zs#u9i+8>NLsq}t9@9^!n0hrWmeuu}{LG3cvyz!M+sXU#9lGUe%0%1tabF>+SH~YK9 z4|zGeG@9gHoyKzn#imb?%qT&Y9Y)OQ^(Kt`<)!AU{y(yu03!k6s*701jxW!V*8TUYdpMUJX0y2hRh#;5vrKn8YEa?N5okt27#}K46mx%KfB_pDjbCNa zL^i9PK!B>wuU(~Ae9a5e!v_>Jlqv$PZmLHVv<<~+0*+sY{IYiWrbs~wi~Ay{huIZ^ zH-A{fHBwHxmPK*)Sf1R~aMO`TCkg*urCb(FMDcP!N){(o`UAx#3Q)-5oqQi&)`0Jh1)4h3x zeCC=?Ei(jo2C+6zYlR5@ly!a+G2w9dB}tCrEHYR$XEXuAH*tglu*}9bDAL~106N%o zCbwJ(CtR$ZaOJbLK;NuEk`TEDaloOxn?7EI28GVVxg9awrMQjs$<8|c{u;j|Cxo^c zuw!ff1IYYhjc3c~xbI2?!+mThitKv3haNx@_N|Kd+vX8Q_R)%@eOurATTir~kWId? zYwS&yqfT63B(<39(jx%RH|3{PFicpF<5A*DR)c~16yw_&1nW@4G{Mqod>!%5w|Su- znde)F@&!~H!xO^;{$vKTcBTnanTlwzq+s8HlO9?_S=j?U+eY4Dp=?&M`EXw1r74~x zeFfpw!A^0UEbV82he+u&K!`+SW6dGToozw)zr_Y5Yf*gpr9Tn^9%=H|H#m7+w|-!p6a(P!+M9$1mQL;VAfTHbr=Y^6ytJ1fX4*g=m5#I z#DwAlc+eP`ddL_h4ONd8oH2T4`uA$Lqu7Q_-3hq0EPYrm>^=cI(lW%juIH$tB-|y}&jNnv%c2=-)8Ee-xk|z(C&dcdQ(F`At`?4E zDaNgrt?n2lJ`vq$>So_3*D^9ZTgNMiKB)3wmW0-NjB;T13tp?aHTd1yv5 z8#R7?NqlSqH4$_^km5~<2)gmKyJQm;k=%L`@~zWiSB)NvTg)_;K**tA%9@VN(MXg7 zE6M`_wuTHQRRkOIjW5DKJF@SbHNqY0NmeNW;bdeZ{MMcP*y~`@rMMq%z*h^Go!kUf zqweCs!y5pV3pjop|G^k`_EsnCr?Mq2(op{>)0u}Dtv$2(hG-x2os~bkPYsW3tdw7I zNjDFckPww{4+aJeZcL;wJ88=Ww=JYDlum zCk5iPtfo{8lh~tbHQ*ab3K~VN<^EwOmzO(&XLGazJYFlX$oWh+6!jdJaT*IF1|Zn@ zQ%i2CYH}A7pXT$z^WgTGdOzgfsq|R;+ko%EMU9IV&mdh}_30vFriNAy;UPE2op!d1 zm!W21IKZX@ho;?b=4-tvNk$N=oSRUvafDcH2zVc-{`S+~sVy2`(^i^Gyj~a_!@OTy z$bNm$I`+^~q|pWH4&Z)m(siRuj4>LbfsOx4A<3jtvSSU-cI`V3KQ1t9emJn_R<#`h zsV9;8v!w7`Ek%@Iw*R5W7ow2X&1(X6dr=hJyQSKAf?$l2RYQKYD&b)Xt0F?eq3wRTyT+at^)0 zCxE^B&E^?LPAzSojT2HYk@GP0(k4|A>O;GcYxX$5{8+0VfBw3J9dQnVMJN+wy>nSr zTdsLV3TO(e*Wfn4yb+EH)O?8!mrHqw8fgIB`bTX(Mdh2>CBQKNyNfR~mmO3(9G4ny z2rCh^Z>??5bV)#A`Uv@7=NzED7+X$bEs`J@RbA;h? zGq%m_R+q+e4aM6+gKK8&7_R$b9s>g0rn*Ux=WBLNuLgB~35 zXEoejCJ3K3=H!Hx9h0iwB2Ehpw^U^%>p<=&Ho!Qd6@PlYnH}BTLf!7>X5jik@bd1N zjUMixQ2Ux%^Q!mKS$d}VWPjJFqb;iZS{`&EI(M9?zwF(x5K#0XHmTuw6WIZNX%5ov zx&AycOkKdE=UwU#z&z<%ec;c{th&i?f^~gJz7L3H+;n5Yk_*BvB%^l$|aU z7JZt(Oc4k(2N)>tjXPckH^1RSIgWk7c4oz(w%@GxV6lyk4Y-o0$T_^`(+jjdLlhCe zZ4y67u6CL0&D+S&oe(cm7IXkC^o%OL{`{c3otU>Rb8ThG??RFMpKqe0FCI)4lkIJ9 z#U2jzG_fzHA!kXDs!YtUgjO`kd{iRtg_4Y~q59^7^`o!#yg1VY4lKWN8K`}fzw|-v zb-!41-7bmvl17}X#Pr!GWGrX%mLB~tPPN{w#SY;lpLq2X=+#Z#C(Hip`vEOw(!$d5&zu05DY>X%=HxX(8qOzGyiu5oqa7FOqX5Eh zbu5rktPqv%;a4o%&=*YWPi6=SA_lw^EuVkrejP9Wj}iU3-dy9(`5bn>4QM4Q>Ain+ zefG^d$V&O7n5k25+Xsp3aq3%q5O_!EwMzmRS7K|VGA?nSNN4MIrZZQ)Wn-evUe-j0GPY9)f1yrm zJAO?JU}{9FCVni`yn+9WASdO?Bejq@kCYaPL;^+y$Ga=k0}N)LwiEGh^DJasqopPA zk$~*)^4&y+K>5L$f8nc)!FO5QJ}rajWREMPUn6#tIRe%8XGR_WL3z6zX7{qdex3Nh zV?F&=72DIQm!pFYLoG$OP^q)Z095WYW9&ZI@J5j1sXpdZ*kurL*Au|{UowB7?!Vh} z`Tk|Wk+~AfvW_yDm4%MT!&E_;s;0T8q13d(rHZ%eODbe_L0jr5nRZOMr$4A^dAVHP zVftd0z!g$*$k_qD+(hAP_-P1|8gqaE-&?Ek@|tE08XyaM61$Ykw5OE&|JdQr;gbuh zi2Tzif$NFdDiN>1|L$Wufll4uRt6eX?3m`)#m-2q_?WjI*IcvZRLrwu`bEq}~ z>LtH~!(RMf_Os3x`F0~4Fh~Huz+Cc1j+y@<|B|0|PLDogJLeBbvOL$``oz}!1@30` zt}a~I#192_FGyYXpc}tYCsno72-$t_|0R~}1wO6qqI2Hy4xzK_MOij=3e;VP<`-q+@Y>xvde^p^^#Z5=*8=kbN(VK_`&llTPsF_Lb!4m_1 zJ?CQmh1*&o`UM^rv7(rOAGN)aqGXmr`pKf5UDgHCNq?44$W->B)fK9fIR8E`-ccu(6# z`Wf0sP9@Holy*vp-!cr-zGaS^;z*tc?XQf>Jn|`H^l9+(;i0 zF-)nFe|4h?H=j5??PD;t3G=})8hq=CeIEPzNDXyGz(V&0Q0dYJQ9@081AV+l-sWt{asr9fGKUv&ExDc)>N-92*dpNJAE(L; zpVl@85;9WCXh!Utp{MBexIm&|tbcLcKo%P2zgY{ZYKHhjz3>aE33MIOr^f5^jKZn5 zwT0`dg=@9G@TYeXCn&(~)4i-MObcWLZ~9ADMM_68*vrtdCQ9vPjQf>90G>R>#!%#( zF6?P(!q>}Z;~|I~Ao&d?^Ot?7_=1+6;nj9<6Mn_=&~cr8`qT&**#~_G+cA=*iFsdk z+M12{EmcQF1+UX3qT`=xTAoZmx(c0#g*_pa8oFYXJbV%jCuJjIPwu)UdKXDP2=B$j zlN1^5XUh+SvM!H?7{H4EM?pHe=RA~Ow8(j&sv`^?&B$pPb$b5W;7ymN4InY$=}j?F zs6C{HNE0`MVR|6>eha>ET-FC29uaJm=mQ3$CEYj4v=bwMkbJmy`bs4n2DG00IbiF*^FMa?QW|+C4`<+U%alVM+bJ~o_WFBFWn%9&j%Nf-D z4;YugZw9dJ9n@|kZnsi)fSIvwv~MGOf(<|Q(585b^}%lZ zz5H%CTx)J$4dRiY!IWxKEgZRNnCVDRM|56^ b`iQ5OzT6h9EEtL0fdmxas>+s18-4wM*t>>v literal 0 HcmV?d00001 diff --git a/src/pt/bakai/src/eu/kanade/tachiyomi/extension/pt/bakai/Bakai.kt b/src/pt/bakai/src/eu/kanade/tachiyomi/extension/pt/bakai/Bakai.kt new file mode 100644 index 000000000..b37ed49a1 --- /dev/null +++ b/src/pt/bakai/src/eu/kanade/tachiyomi/extension/pt/bakai/Bakai.kt @@ -0,0 +1,160 @@ +package eu.kanade.tachiyomi.extension.pt.bakai + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.asObservableSuccess +import eu.kanade.tachiyomi.network.interceptor.rateLimitHost +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.model.UpdateStrategy +import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import rx.Observable +import java.util.concurrent.TimeUnit + +class Bakai : ParsedHttpSource() { + + override val name = "Bakai" + + override val baseUrl = "https://bakai.org" + + override val lang = "pt-BR" + + override val supportsLatest = false + + override val client by lazy { + network.client.newBuilder() + .rateLimitHost(baseUrl.toHttpUrl(), 1, 2, TimeUnit.SECONDS) + .build() + } + + // ============================== Popular =============================== + override fun popularMangaRequest(page: Int) = GET("$baseUrl/home1/page/$page/") + + override fun popularMangaSelector() = "#elCmsPageWrap ul > li > article" + + override fun popularMangaFromElement(element: Element) = SManga.create().apply { + thumbnail_url = element.selectFirst("img")?.absUrl("src") + with(element.selectFirst("h2.ipsType_pageTitle a")!!) { + title = text() + setUrlWithoutDomain(attr("href")) + } + } + + override fun popularMangaNextPageSelector() = "li.ipsPagination_next:not(.ipsPagination_inactive) > a[rel=next]" + + // =============================== Latest =============================== + override fun latestUpdatesRequest(page: Int): Request { + throw UnsupportedOperationException("Not used.") + } + + override fun latestUpdatesSelector(): String { + throw UnsupportedOperationException("Not used.") + } + + override fun latestUpdatesFromElement(element: Element): SManga { + throw UnsupportedOperationException("Not used.") + } + + override fun latestUpdatesNextPageSelector(): String? { + throw UnsupportedOperationException("Not used.") + } + + // =============================== Search =============================== + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + return if (query.startsWith(PREFIX_SEARCH)) { // URL intent handler + val id = query.removePrefix(PREFIX_SEARCH) + client.newCall(GET("$baseUrl/hentai/$id")) + .asObservableSuccess() + .map(::searchMangaByIdParse) + } else { + super.fetchSearchManga(page, query, filters) + } + } + + private fun searchMangaByIdParse(response: Response): MangasPage { + val details = mangaDetailsParse(response.use { it.asJsoup() }) + return MangasPage(listOf(details), false) + } + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = "$baseUrl/search1/".toHttpUrl().newBuilder() + .addQueryParameter("q", query) + .addQueryParameter("type", "cms_records1") + .addQueryParameter("page", page.toString()) + .addQueryParameter("sortby", "relevancy") + .addQueryParameter("search_and_or", "or") + .build() + + return GET(url, headers) + } + + override fun searchMangaSelector() = "ol > li > div" + + override fun searchMangaFromElement(element: Element) = SManga.create().apply { + thumbnail_url = element.selectFirst(".ipsThumb img")?.absUrl("src") + + with(element.selectFirst("h2.ipsStreamItem_title a")!!) { + title = text() + setUrlWithoutDomain(attr("href")) + } + } + + override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() + + // =========================== Manga Details ============================ + override fun mangaDetailsParse(document: Document) = SManga.create().apply { + title = document.selectFirst("h1.ipsType_pageTitle")?.text() ?: "Hentai" + thumbnail_url = document.selectFirst("div.cCmsRecord_image img")?.absUrl("src") + artist = document.selectFirst("span.mangaInfo:contains(Artist:) + a")?.text() + genre = document.selectFirst("span.mangaInfo:contains(Tags:) + span")?.text() + description = document.selectFirst("h2.ipsFieldRow_desc")?.let { + // Alternative titles + "Títulos alternativos: ${it.text()}" + } + status = SManga.COMPLETED + update_strategy = UpdateStrategy.ONLY_FETCH_ONCE + } + + // ============================== Chapters ============================== + override fun fetchChapterList(manga: SManga): Observable> { + val chapter = SChapter.create().apply { + name = "Hentai" + chapter_number = 1F + url = manga.url + } + + return Observable.just(listOf(chapter)) + } + + override fun chapterListSelector(): String { + throw UnsupportedOperationException("Not used.") + } + + override fun chapterFromElement(element: Element): SChapter { + throw UnsupportedOperationException("Not used.") + } + + // =============================== Pages ================================ + override fun pageListParse(document: Document): List { + return document.select("div.ipsGrid div.ipsType_center > img") + .mapIndexed { index, item -> + Page(index, "", item.absUrl("data-src")) + } + } + + override fun imageUrlParse(document: Document): String { + throw UnsupportedOperationException("Not used.") + } + + companion object { + const val PREFIX_SEARCH = "id:" + } +} diff --git a/src/pt/bakai/src/eu/kanade/tachiyomi/extension/pt/bakai/BakaiUrlActivity.kt b/src/pt/bakai/src/eu/kanade/tachiyomi/extension/pt/bakai/BakaiUrlActivity.kt new file mode 100644 index 000000000..c83529341 --- /dev/null +++ b/src/pt/bakai/src/eu/kanade/tachiyomi/extension/pt/bakai/BakaiUrlActivity.kt @@ -0,0 +1,41 @@ +package eu.kanade.tachiyomi.extension.pt.bakai + +import android.app.Activity +import android.content.ActivityNotFoundException +import android.content.Intent +import android.os.Bundle +import android.util.Log +import kotlin.system.exitProcess + +/** + * Springboard that accepts https://bakai.org/hentai/ intents + * and redirects them to the main Tachiyomi process. + */ +class BakaiUrlActivity : Activity() { + + private val tag = javaClass.simpleName + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val pathSegments = intent?.data?.pathSegments + if (pathSegments != null && pathSegments.size > 1) { + val item = pathSegments[1] + val mainIntent = Intent().apply { + action = "eu.kanade.tachiyomi.SEARCH" + putExtra("query", "${Bakai.PREFIX_SEARCH}$item") + putExtra("filter", packageName) + } + + try { + startActivity(mainIntent) + } catch (e: ActivityNotFoundException) { + Log.e(tag, e.toString()) + } + } else { + Log.e(tag, "could not parse uri from intent $intent") + } + + finish() + exitProcess(0) + } +}