From a6c35d3175670dc05764f71de24834f92a6402b5 Mon Sep 17 00:00:00 2001 From: bapeey <90949336+bapeey@users.noreply.github.com> Date: Sat, 20 Apr 2024 10:27:54 -0500 Subject: [PATCH] Add SenshiManga (#2484) * Add SenshiManga * Move to individual * Today I learned template class --- src/es/senshimanga/build.gradle | 8 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4341 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2553 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6087 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10924 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 16875 bytes .../extension/es/senshimanga/SenshiManga.kt | 145 ++++++++++++++++++ .../es/senshimanga/SenshiMangaDto.kt | 78 ++++++++++ 8 files changed, 231 insertions(+) create mode 100644 src/es/senshimanga/build.gradle create mode 100644 src/es/senshimanga/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/senshimanga/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/senshimanga/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/senshimanga/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/senshimanga/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiManga.kt create mode 100644 src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiMangaDto.kt diff --git a/src/es/senshimanga/build.gradle b/src/es/senshimanga/build.gradle new file mode 100644 index 000000000..c1da971cb --- /dev/null +++ b/src/es/senshimanga/build.gradle @@ -0,0 +1,8 @@ +ext { + extName = 'Senshi Manga' + extClass = '.SenshiManga' + extVersionCode = 1 + isNsfw = false +} + +apply from: "$rootDir/common.gradle" diff --git a/src/es/senshimanga/res/mipmap-hdpi/ic_launcher.png b/src/es/senshimanga/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6690098e6b95f5e3cc41c0e7a1cf0f832d87d0e5 GIT binary patch literal 4341 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 literal 0 HcmV?d00001 diff --git a/src/es/senshimanga/res/mipmap-xhdpi/ic_launcher.png b/src/es/senshimanga/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..bb76820460547996b742d0ee31c6fdd0e76647f9 GIT binary patch literal 6087 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 N002ovPDHLkV1nP8d!GOR literal 0 HcmV?d00001 diff --git a/src/es/senshimanga/res/mipmap-xxhdpi/ic_launcher.png b/src/es/senshimanga/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..19ab52de270b8cea733ae7de165634eec8dd09b7 GIT binary patch literal 10924 zcmV;dDpS>oP)PyA07*naRCr$PeR;4P$9>*6$KJ;~0XzT%K!}vZ3#4g4BB`RJq%22@<#OywDwRKy zR4Q>*BFd5-r5qpfq1dWKiYpW&S&U7Qrbv?(Nl`pN9kC>;N=d35C88-vj98>hk;L^5 zJUjsJ+IuGW^)cJKJG0Y0yYKCL02a0N7Bf9PeSH1>j{bGG1?6J_@YM@fevhmLwo6}7 zIj?-Kv_Rq(xB{TWO?Tx%YJtrM(01YGEBMfAfz1byRy;}2+Co^}ju5>p z0JI%DW((oEZ&5BO0Bt%@HvNTL4_22HfVN)q4!cBK53!>K&_=We%X1?#9yS;*jr{Zh zbfr%&jUErF#UNd)51^4Y-yl^SX~Bb+55ES(&oN0$4Glm_b%vH_k_uf?&kP?UL!au@ z=xps;$h^A$UQ&I!%_~Cyk{}uim^1(s+hml7{Icm03$Xq6G|4dD5nG5$ErIs1jjy;0 z7*7C5z19IF)AtV2xhm7pZ};%w!;`sO?snhz|Dk1BcK|rx`@R!aN8k5hSr+K8`iZ(8 z)lS{d%XGuK-u+(Fa`%>l>P-Ep|Iw{WM7kD$H!aKh>sG7vvTGs3Ot+JU z2~d-FM%E>yk-F2mu8T}2gM2<;D;A62$z(F0dFiE>o(DkSA~Z{8(nqyO$$?wQJX6sZ{z`ue|cgw*b@?77AXawonwum;y+GhuFtGc<|t^ zY&LuU($dmdEi%czCcZY=STc6!l$Ch1Mmnt*(x@(mNaj^kizYKp+~E3>n+ z^Ic4&Ey|Jt$OVwT;f5Q2esy*AFDjKvT35H}*Ptei9mi%H*%^c8&4zdc4Go&NNgL*J zx%$M!#6LfA;>1@43#p2=7KoAnh>0!$nd`5={?8T{7yq#=be!1o$nuI%`b;dcD3KAR z;I`AVl6HuUVZ3)3oo>?c{S^7`vc!qknVFd`hKQKa6#fundB9lDi)CELARF28y1+_@tFDuRWCWu|9YnF7eR z0M`dH0P?$c?>^aVHUmFTKb>c@MAtAn-eiRLOKVmZ-eD%7>q$%GYK1H5QTe*A+p5)S zR{>ZDP!lXfAkz9614xLkEP%rF^z_NNxAbd}IFV=4m}Z^DOTCry*DXt&ND32SVSS{g z^E{6Lv?jzD`C+vELZ$$c`VRr9I6XamJSl*}M{c}nJVUAkBUM?57FVh6d`&H{xDh!lCey7)644W7AsV&0 zhN0nk-qiv?qz7#ZfbxQYi~uwUBg6q>v)PL2tD;azMt#@-83Y)*Kn`oifdCXIf|UCz z14RO;Z%4+M-&+ABrpz=*$Hfh($h3aRZIWhoEO-;R_V@Xk(xQ@}u zCvJqsu|ixK;_{E{@Fe+f1x0?i0E$+MdKicRq|0DQL`<8JSl9F&MZ*>eN!f5C87T=s zb;>hb07WArF@WM6jQtvBxc7!BY^70A;RI`hvbQ?#9O@`6Iap2W0 zFEIptUDrV_n?pn@WKg$)?7$ZPtM7x5Z6R3X`qZ>ZnvJSY2Ji+S(c_)f(#c zI=og3Ehhdvcx2vcP`OTLn}|qLCn3F`>SsG7h8(0*Ddch)6!LkLibdpeS)@{Fq|+%_ zut3#nc~noI0f*Rz#1;*#xw(0qU0PDae{|4(6o^L(pg2(##Q@YnlamwJwR0zn({+SQ zCuSnRv60Asz_NVU7F`#>VtSK@YOTtEL?f{(g7_QFCIeif-e8SQ4NVQs8&5U#qb5_^ zW@wKNVGu?l^%M$dr@=wuhU!V8hy}T))5vDC$Y#<^G&!!#V$6t0JfG`>%zs1RX~_ZN z1puNt)oV4(pIOB6@^a|JaI8)#s=93fG*&KSYH9*0ml(+A>_eR-{&LXpm1Yz}%g9bJ zlLQwf5FFTEF-Pq#u;R5m)EW)WTBKhQldZ3#-e@q|XSzcI){-z|%xROzNimU=$!1W< zwJ%cL;(cPkM6hE#L+eRB{3X4!$741%kL;BvFp;(d91EcBu4vV0-h}ipg0{v-X{xe zYI1_Hk7OA}91I2R@K+8X2`+w}Gmu~4mAFVP|n++48jit6R@3ND4{@>WHYX} z5hTTj{osl!k7?#`kt-%-r!gQ1g_a3TF^#|hBA44f?-iEx|_0B}rBt zBUB0zeo;Ozpu!OqJjY)v=bnf)WI((SKw`;_OvV5ukP;-7V35F*_c=KQozH9l2{en# zV6M!IlCpPk5D|D9%?4wj<<(9GVy_9A|LVCmY8_}|VnWXflY>|+XOG6+Bh&xekRVm`~vR{D^3k@s78cOKZ4aj_1Y zeb+1pRaop>fsF<%G%X7)GI1@N$6wM&4bUMV6No4E4yS=O&q(Pd=%7t`Z6tBbFtN$| zrE{Sl8`+X2Brs)~w!D*aj{%+XU`u;_53c9KwSY7{WZ)s^w~&K}yze207SbN@lbVPB zu|@!Di_VpGvOZ}|VEYp-z6AYsb(j#3+XFyh)Jhax%w-wtP%pV&3;&=9{F5mcbcseh zfrCIofT3uorf;E1fbuAW&c>Q&Va=zIIvW=}8!ND|CcsDcYd$T#w3q|V6Wt%^HbH}u z;w;IA1A;L;^Givcx^3^VdlEMS5X5i}1BQcPZUlmw|MYX?2w*bK_eUer<0W|6)&;=|v8yLCS6pQv48bIFN*8#(*ZRG&xx1 zHED?jv=JybQlJSHmFL)Legz_r>rsjb3=;AO6lul)z*7seK2V0+*Q6!Jfy2Ko_-J|r z9{LM>=0pt-%vZUn4wUpxS#-$(NDDZk4Z_miQgCtf@Fe%Q1PsI3MhX({<7ulZ($Opo z7=A;_n!x5)0o3(ukX|r`D(B>TRApPe-|?IKdYBs^Frj3Ja}!>wN^LWrL^Ic|NN*-x zhm__@y@~gK|2%$DZ96;%0ZW*^G%^u3K0ZE>71pKCb^Mo@=<%PK!Qa_k2DynGZsUr^ z_n4K%{Wr2<#aI?w{Bn+HTV)+H)nQ;zuoTb_GveC%5Z^vn^uAcY7x;|=eDtd4Qh*5# z~yG<#(%zk z8Z)^xb2hp*S@iUmoBNJK;*EQ-#T1(GL~~K%1?(iIM3}PMV?za?pndsBWVTIv>4yqT zthQs3JlDargaQ%CI5HoGYvBMCGLB70FkJ>rM0u?yn-FFqtHr;yW)rWk*70v&Uc^t< z+j}l;1pvvRDG6H_13hMZ5&-FfhYEF3m&PxTr*Nd`AVs>601knOMB7`-ITQ(10w{ql zl zJhT%Bie%?VWtGfs2gu~{>bZ4%?Z>k~v%xGh=8qK9WYRsY;8C)n`9>@vQ)u*&mec3N9$W(qJ9cLXA_cN{T_50r}q{IeVPB3oO9E%h9-v^-$7 z<>7NbUcz6Wt)SxhsQEtDJfPAHqe13Za4bB3 z`yO0Z$_RZ(pu=&2Oab4STfv9^@9S7^wuFf3r!z) z9b3S23u}?fZz9=83g3`v3!&SDHg)%)-jV>)VV*FHpdTRBJd2Knzq)M(*OjwknnRfF zP6}SOfN!0?fPeYj*RevwT>11X7e#14a{B@N{GL4gI&D)ikrk%fk?M$xS}#T-?5ppX!CQ-&U|N9btu6tmi04mVz_0wDH<*a% z*Z6AwY0JVRx9!IVX0if6?GlqO{L`;q!0-O}d~8Q|m-+8b8jnQ1{ z*UvWaiIY`k<_}R{+Ij%e1&(Zl)WzQW_`VF@H=X8ZCy>`!OrT2fBxl|^K>T z2`t<*E=_xBp|P2H=~H6POFmcj-_JJjhbOAcU!}tATnnN_PGHn+4e}cI*`7C*$ zWqQTRWys-ThQUDzRc(WcGYDrOY03*W3Yd#u=j=mk!F=YeroU`WnCIhbOHF+I%?b-a ziPGf~T;Kix%GehE_}UWw{ zV>FoNZ+oDnuG7IjiUK2hN{!)Y2QYVtLjn!ErHHQpTtadZz+`+si)3YMJZQd*d#!1% z?C3%jzw_EE>LEJN03s~}KrwzG(QH98_S1!wv>kq+qzn`$-m({`EbhH!7k*(+kxz~? zWw}#t3I0bxWdUP!g_kNo307Q4AgQ2{py&WnfC!~IR57N6f^@|Ji7)}79k&&sfasXQ zLy?Aj9?iEX-kTS;Q_UAFB_aXZlde9SAA9QL1^oIC=b3SkfN7$h*;)*g#0nz@`lB0X z@PR#JT)&ZoAVNxmn#;*ciXpZg7E2sppe?`Hgd~kvDUO1bu51>x9q7UGWqEcj0F=QX zK~R_|fus?UHDBYUXu?6r39$zU2U&($%Y#M1@1zw|dbViNVKe$PU&bO6*_W4tuP5~2 z)4DaWc{9z@KYMZsfAphy#z3;2L#8G|&thv6W{>`q96)VDwI2t`W)3#l%mY@jTrS1x zKqkuc!HkXfkEhwpyE--{sqku3gA+U1_@#Yi?9RCYM11j}Z@Xw&7G7DY;=6MfSf~V> zG!3e!L=!4Hbr6Nojyh7Ki8>+_r4iPaZ2T9`gEJ!c^VqOl7rAT(@7-O-IGS);JQS5{ zOMKGwJM*h}b-Bi_^Tm|H0+0&0m}^`0z-H%9)jC(x4#7{996+(KX(ynnbxviJ%Ws4m zlRUhkW9fs|izv`sEDG$Co<`@GYvJKrcj5X{ipK_#PUJZ7ofK-mjjzuxS{*IGXQ!z)X8YIdE4c}VQ2 zMV3Kr6ct1>_8s>OCsKK_hsZ!${n{QA9RMno;u$Ei^CFJC?3Z4>H=VNaESt)3;DCb5 zNFuoKoiyrj@b%eM-1Xu~takxOhY@w>&ce#7J}cS%wuu5hfBSw+cy;7jbtcB7rM24h z@q4eH!(#*>CBrE3GzfV5)O|DzG$?=!z}quwb`XGmdK?F`Vr@FHkeh;^&Y)>I_{RJ? zKKM7Mh7O>(GKX~%0qFjB>_xFzL#9y?n<#KAi!sn^Yj}LV(gC1==@KxcsYnA53!o@f zN6QLRr1DT1D6TX5jkcXB3r`&y!@dj;x~IK%9NIE3lLv*6eQU9T5591+M});O&>;7t zo_#w3=*Vv5n^mN16`@FTN8#GVMTMVuqk_j5YDNI+SIz|YVgVG@R~rJLBvzO@;&gWQ z*p;&Ir5j4PDoYzv`EXnZPAbg+)U<3of2N8L{tX9E94I360#>9!MG4jA@OYj9sL-e) zRbPkSXre`%XVDQkEgzqJvx>*h)O$o&Z>PoYooH&2iFX(PsFRC^1|aE{>8`X+=jq7x z?tB@5ZY&A_fo;yvclxe118s;1D;A5fexRrq>xhPKW>UiyW>OZOK2*l;46V@MCOnBSivh^NHx|~J z4n*M+Vfn;$L{ubX9MHq+b!4J|`+jByrB)T``Z~O3D_DiP?s@o6$7@W4$(5{OgK?1Z zXy}@wVW2?)q*1XTN%tt)Edi7jD_0qSGC(@Z80fFa3VZQXc-Vv7;UcC0(IYon7wG|* z4;-E>;QqriC^oA|kqDz5XGJK74uEt(+i#$1wDYA8pl-(4leY2Hp%P}Ybm7b*k)K^d($?)d{YTC8HX=@rrl6eE|AKx?O(pOP{Ca4>e@Os}aEhCPN~bPethBWlNE7vanKdqttI{@} zBnBb?(H1bYs~MT`=`5PQjjztF;X~g)-7#xz!WvAurF=lOE;CVoB4sr3r%Kx3cj0T zD@?yKMC2l0^Fa(LPKPLcrH8z#u2?ip((Cqr% zC#ra;4}eTSA6MRpw%9xXS$u~#wlXy-10}3vhh;`ZeVhyX+ka~8H|x1s8J0ZiChQr@#zy)d|`q7K>#jP-x%=mQM3Ogzos2f0i!7F2u z2hf+oET9|9Ieg*B48~hEq#70Yjg|h8@xh6Mi5T&f(jT0HWwc)3U|A+ms!yE9LMo0m!Q%MT-mRXa!n*L7RKF zeEio_RXi|XV}bMiKBn)D&Z{RlV`~5?uHnNg)EjA{lh1zg1KnK44w}lKfHLU^N@vl6 zjb~@q@!>8Jrju`6nz;K?$ye+8Q>82(J+d2Pqyw?JFz$&a08wo7XHV8}|9nj>`!O@+ zbu2`U0XrH1<@5QGSz!kbbD2=0$qH*S0Ie|qbu&;m8^wvsFp<>VA#rK0 zDP-`)ckIC!Sz#o?nk}(sHJG33Pfl0y`Pmu^t~b$Zbik|u9!j!30n{m5lp_WD)LJ$g z0qDs?W0(#A#3xgIH;a~K#h6EPVVr>oE5t&?K=+=i z;?Fh&K+#Jky6z+gQ1Vq7C?;hf-I3Gni&USxI%DHYhsu~HGhR+*xZDp!4D`(GI)458 z{jIPtabv;&y1LbYTn1mdT>ywgn4FCVF_4GPovz`&SuVoD*e$7Eq{%*8gMl{N3VTb& z#^Z;|m{R>fE?HsZNObV*+&VsbjL(IIiLE$B(Xobf($Ks2=QDVc0Mz0!(Jcxn6A=Nl z2jaaatGI8j-XX%`9GJR;P!mMS8A$U5l&oi2PZR?suUwmR;_{FHnoNmPeppB=_X81t zNQC{nW2bxkKymqQ1S{>$rSa4q`!L?3*?1+OOsot0QxajC05TD~27Nnv0O@p$ZiRI6 zx+Y`eu|s7LfM_m^CR5p}3=(0MgQrff;WvJu3!oTFFk)UWj>Tks_hi#}`i_0f3S%+R z%_iSOfzHD4f%{I^@ZY+0AlC#p({3uGAO!XLmTs$oR#EuVOONqnw{%My$2ee7k?8>I`>>XDLKhPSyi@TD^ z!&d4Z@cGkK1|Yr^J6sQn6PIyqxyb+uX>C4b)v>H63P3uQ(dmq+eCXMq$~k!Ch7u;2 z2&1VC2dlfKoiDUNF#a{vh58 zGtnvH${uxpI+Mb4qyzaR!UO|}J%I?|56;%`Couqud$-P@?UN=HKyBRhcL(UcyGM!6 zX0sjJ{Kh%ubY7$@=C02Y z!DkV-I{h`!vL2OzhF!_-{JQnn8*(-txW0%?X*_ zJQWn(n6vTu>xyk1hz?*O0MW`+Cyl3O*YL3r2BMnjmRToVTpGGRnRapXo%=CK4u%>9 z)ze&<*v`)P@z7iipNU|gxcr9z9)*EGn`3Vt1Cas2qj&7XltlodWj%ahA#JWe z4#h|3>MW##oQiT&BAqguwEdQ3AX5OD=oNh{?EAPO?=S`$cZCv707|*A7=W^P;^Yc` z|A%}sm32l;j5bRXZ>_Lm#Q~_h>}A)+SKfI5lU4(6m8>xC2V#35G62x)&1y{O)HH&ne-LLGOX6bzIQK$_T(YKqaA@tI6!WLDTsc^iNFwi3#0 zuSy>z!sPZYEhmk~PAuaOU!Dt{pfq8^q+(0$sj0M!$Byj5PP+k@_6KV5o#y$BypJaq z8Vo?)%dmBUKZJCn0}vHHPIpLB!MKr50Q%h9N*JS^$;ganOM6^+sSKL7i!Yv7#iw3d z914Kq${$zOG1tal-nt7r?IzN+Lm4}yTW^ z#kJ)O-Zz;7Z4XQUA`r79F`X3X9Qv0o)bNdkRV=R4a+zM2M%+70SgQM!MYS@Sl!IM` zEPi=MmYpk4Y{^bFl!wj%_|a+;-(9Zb%vz0YD83n=p~V9k6t>5VClO}wyw(z9o&3h~ z8SI`evBi1pH1FWB6@C~m?RxLP!}*meUOT&jW{XaFR*v8fd5Nior~^PsQ!Zq&cd8s5 zXCTEEKSYHea=>;c_B^~fe*uj?n}X`JO~Nz@8A#d3TjRw;0g%RfVv|s(?3^qM@Gv3D zo?%-rvwz$>y}VYzsl^NIAY0v!4lpP$oph9@n9pMOj&Xiohg>Dgw(o79$V1oZz}-{x z=NZ^X@JR?DvyFJS1c0cq$BH@ZAONvV!!5CEy*&1SAGkuFmDMWd&guh52NWjYp|l)8 zW5F@;@*RwQm?FfL>7fJ2%q+Va7FOYJvLi8_PA5L{GHR6dh>{ThO_=~RQ4(2*BN2kl z$%Rr+09vbJZt*^X!@PXv8fJ(=D)By3vTR(E_LtG*NIUi*h&%U0YtOVm=Z;q*Uwa8%e=K1!Mr4 z9%DLCx7gw*B65@7^E}KhUbq6FZs4mTi5if?Pj$tCnwOeSsgT9=IA$x{lYE<}H?04SoDbQ)W? zgPCcZ%V4aS4Rj!Gyz|2Z13d`9TD6X)<#i?=bU!9#)k&L9IhYX z4=i3-9i15;Vuk4#asvgFrBW%TM8{EiWaougSUpx)$iqx=mbQ9Z6A~IKKR{KQ$WhzI z$^jiuQ28GFFGSAd%wT~zOYHsA_ z3N)!hJJl0_3i*8g1GQT1vjEZtW$sBjERi>e=($_~)7AL(Y&QF=)oS%?H1`akN*ji3 zG=ON6DFP53cd*ZO-Mf9?zjF`(b?Z9v|E5~RARrjz* z+a@)E=aUzYw0~BJE-AifYZtkFqgG{10YvH9j&cApQWqk9$hPhGSeErq0UYstpY)^+ z`3%AsgFL$-l^I5+W&@G{@;v~L0QgQ9cxt5ku+VMI-N~ra@r(N_Y9KqOhK<2`1~8&br6zICG}Fs=T!NiSPL z>NFBS1Q-I51dcS@DV=f4nToJ(;7Nv&`$tPK(f{RFWvy+~`lBf5z=Nu@&|v@)AhMdu zZmg=(oDe|CT1y3nWFz&j1lJV+C2L=Ur$V5|FNsA&fn_B{nfh0P#uz+FbfE4^so+o* zZ23D>e90FlDzQPcUP;PYKyKYB|4LD%UQgUqre=K9i`0Bn@C>4BC9c$!2ZI(+$Eai@ z2`cq(;wBpwfcgPt*zZVO+2K7Hqpb{CnHfU4JAgEV{DLeDJ6E*K)@z_)w#j9kmuc4; z0_gHD*r3LVl3oE&qGsDJ z4{iJ?xGVq^)r@_ccjMcByP&XdIWG$UZQGvO1|Yryplyq;kb;i@aQ`3oRYqfHho)ix O0000 literal 0 HcmV?d00001 diff --git a/src/es/senshimanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/senshimanga/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..705a0cd15511a43f6b5b6cfbbd5a29730afea965 GIT binary patch literal 16875 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 literal 0 HcmV?d00001 diff --git a/src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiManga.kt b/src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiManga.kt new file mode 100644 index 000000000..3a17e353a --- /dev/null +++ b/src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiManga.kt @@ -0,0 +1,145 @@ +package eu.kanade.tachiyomi.extension.es.senshimanga + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.interceptor.rateLimitHost +import eu.kanade.tachiyomi.source.model.Filter +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.decodeFromString +import kotlinx.serialization.json.Json +import okhttp3.Headers +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response +import uy.kohesive.injekt.injectLazy + +class SenshiManga : HttpSource() { + + override val name = "Senshi Manga" + + override val baseUrl = "https://senshimanga.com" + + override val lang = "es" + + override val supportsLatest = true + + private val apiBaseUrl = "https://lat-manga.com" + + private val json: Json by injectLazy() + + override val client: OkHttpClient = network.cloudflareClient.newBuilder() + .rateLimitHost(baseUrl.toHttpUrl(), 3) + .rateLimitHost(apiBaseUrl.toHttpUrl(), 3) + .build() + + override fun headersBuilder(): Headers.Builder = super.headersBuilder() + .add("Referer", "$baseUrl/") + + private val apiHeaders: Headers = headersBuilder() + .add("Organization-Domain", "senshimanga.com") + .build() + + override fun popularMangaRequest(page: Int): Request = + GET("$apiBaseUrl/api/manga-custom?page=$page&limit=$PAGE_LIMIT&order=popular", apiHeaders) + + override fun popularMangaParse(response: Response): MangasPage = searchMangaParse(response) + + override fun latestUpdatesRequest(page: Int): Request = + GET("$apiBaseUrl/api/manga-custom?page=$page&limit=$PAGE_LIMIT&order=latest", apiHeaders) + + override fun latestUpdatesParse(response: Response): MangasPage = searchMangaParse(response) + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = "$apiBaseUrl/api/manga-custom".toHttpUrl().newBuilder() + + url.setQueryParameter("page", page.toString()) + url.setQueryParameter("limit", PAGE_LIMIT.toString()) + + filters.forEach { filter -> + when (filter) { + is SortByFilter -> url.setQueryParameter("order", filter.toUriPart()) + else -> {} + } + } + + if (query.isNotBlank()) url.setQueryParameter("q", query) + + return GET(url.build(), apiHeaders) + } + + override fun searchMangaParse(response: Response): MangasPage { + val page = response.request.url.queryParameter("page")!!.toInt() + val result = json.decodeFromString>(response.body.string()) + + val mangas = result.data.series.map { it.toSManga() } + val hasNextPage = page < result.data.maxPage + + return MangasPage(mangas, hasNextPage) + } + + override fun getFilterList() = FilterList( + SortByFilter("Ordenar por", getSortList()), + ) + + private fun getSortList() = arrayOf( + Pair("Popularidad", "popular"), + Pair("Recientes", "latest"), + ) + + override fun getMangaUrl(manga: SManga): String = "$baseUrl/manga/${manga.url}" + + override fun mangaDetailsRequest(manga: SManga): Request = + GET("$apiBaseUrl/api/manga-custom/${manga.url}", apiHeaders) + + override fun mangaDetailsParse(response: Response): SManga { + val result = json.decodeFromString>(response.body.string()) + return result.data.toSMangaDetails() + } + + override fun getChapterUrl(chapter: SChapter): String { + val seriesSlug = chapter.url.substringBefore("/") + val chapterSlug = chapter.url.substringAfter("/") + + return "$baseUrl/manga/$seriesSlug/chapters/$chapterSlug" + } + + override fun chapterListRequest(manga: SManga): Request = mangaDetailsRequest(manga) + + override fun chapterListParse(response: Response): List { + val result = json.decodeFromString>(response.body.string()) + val seriesSlug = result.data.slug + return result.data.chapters?.map { it.toSChapter(seriesSlug) } ?: emptyList() + } + + override fun pageListRequest(chapter: SChapter): Request { + val seriesSlug = chapter.url.substringBefore("/") + val chapterSlug = chapter.url.substringAfter("/") + + return GET("$apiBaseUrl/api/manga-custom/$seriesSlug/chapter/$chapterSlug/pages", apiHeaders) + } + + override fun pageListParse(response: Response): List { + val result = json.decodeFromString>>(response.body.string()) + return result.data.mapIndexed { i, page -> + Page(i, imageUrl = page.imageUrl) + } + } + + override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException() + + class SortByFilter(title: String, list: Array>) : UriPartFilter(title, list) + + open class UriPartFilter(displayName: String, val vals: Array>) : + Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { + fun toUriPart() = vals[state].second + } + + companion object { + private const val PAGE_LIMIT = 36 + } +} diff --git a/src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiMangaDto.kt b/src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiMangaDto.kt new file mode 100644 index 000000000..78f8e99df --- /dev/null +++ b/src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiMangaDto.kt @@ -0,0 +1,78 @@ +package eu.kanade.tachiyomi.extension.es.senshimanga + +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.Locale + +@Serializable +class Data(val data: T) + +@Serializable +class SeriesListDataDto( + @SerialName("data") val series: List = emptyList(), + val maxPage: Int = 0, +) + +@Serializable +class SeriesDto( + val slug: String, + private val imageUrl: String, + private val title: String, + private val status: String? = null, + private val description: String? = null, + private val authors: List? = emptyList(), + val chapters: List? = emptyList(), +) { + fun toSManga() = SManga.create().apply { + title = this@SeriesDto.title + thumbnail_url = imageUrl + url = slug + } + + fun toSMangaDetails() = toSManga().apply { + status = parseStatus(this@SeriesDto.status) + description = this@SeriesDto.description + title = this@SeriesDto.title + author = authors?.joinToString { it.name } + } + + private fun parseStatus(status: String?) = when (status) { + "ongoing" -> SManga.ONGOING + "hiatus" -> SManga.ON_HIATUS + "finished" -> SManga.COMPLETED + else -> SManga.UNKNOWN + } +} + +@Serializable +class SeriesAuthorDto( + val name: String, +) + +private val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US) + +@Serializable +class SeriesChapterDto( + private val title: String, + private val number: Float, + private val createdAt: String, +) { + fun toSChapter(seriesSlug: String) = SChapter.create().apply { + name = "CapĂ­tulo ${number.toString().removeSuffix(".0")} - $title" + date_upload = try { + dateFormat.parse(createdAt)?.time ?: 0L + } catch (_: ParseException) { + 0L + } + url = "$seriesSlug/$number" + } +} + +@Serializable +class PageDto( + val imageUrl: String, +)