From bf1fc04a2e97b76a54e9556b340f890d6c001d17 Mon Sep 17 00:00:00 2001 From: Tef <39195498+TeflonOfJoy@users.noreply.github.com> Date: Sat, 17 Feb 2024 20:02:37 +0100 Subject: [PATCH] Add MangaSaki (#1273) * Added Mangasaki * Added MangaSaki * Added MangaSaki * Removed page number check Co-authored-by: beerpsi <92439990+beerpiss@users.noreply.github.com> * Applied requested changes * Add recommended change * Add requested changes * Applied requested changes --------- Co-authored-by: beerpsi <92439990+beerpiss@users.noreply.github.com> --- src/en/mangasaki/build.gradle | 8 + .../mangasaki/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4462 bytes .../mangasaki/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2517 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5911 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10380 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14791 bytes .../extension/en/mangasaki/MangaSaki.kt | 265 ++++++++++++++++++ 7 files changed, 273 insertions(+) create mode 100644 src/en/mangasaki/build.gradle create mode 100644 src/en/mangasaki/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/mangasaki/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/mangasaki/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/mangasaki/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/mangasaki/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/mangasaki/src/eu/kanade/tachiyomi/extension/en/mangasaki/MangaSaki.kt diff --git a/src/en/mangasaki/build.gradle b/src/en/mangasaki/build.gradle new file mode 100644 index 000000000..1e5f38003 --- /dev/null +++ b/src/en/mangasaki/build.gradle @@ -0,0 +1,8 @@ +ext { + extName = 'MangaSaki' + extClass = '.MangaSaki' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/en/mangasaki/res/mipmap-hdpi/ic_launcher.png b/src/en/mangasaki/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..74db1be02ebd94d5c4ce998f6a9d7f911b3f1e4b GIT binary patch literal 4462 zcmV-!5s~hRP)Px`C`m*?RCr$9Tnms~RhjC;YHKMU z$g-5E)Mjg4E7{duie-dFY88!uvMQFY8W4?HkgSo?QkDdCNg!&%Gl9HV^PKne%=F{F zw$8ct_C4p`bNb$%nP`<=Q0a7^=XbvU`yc0a6eN8q0GyR@;_(Cx zXVo`xr`V+@ZXla75kQG&VH?hQlZ_70XnVn~BnLdJ{r_oo@{lCNGCz}q_elJ40-v0WLF&8Ly}Lur zrPfy~#%jm0(y)X1g17EF<}0_6!+sX(=-461y;XCAc;iL}c89n9eTMo7o7;e@qLOaP z9I%|~lY92;851p;H9U!l)s9WO{PHWh?J6FgoSZ!0ww+eMQT+iN$Ej_QyyZUk{zBUX zUr5@-_w~nN#}mD0*92zn;H_gTic)NA%kQ(*)JOL3-+dB*B~zn%8l(;k40Pt2+P6(i zOuUnlftxS@NBErpAkyET&}QEI!#acw9-jPMgb!{{DJcGYtmOy+0vy|2ds}@=z^#rGn3XFl?B;l_lWnXKaFQ^EjOWih zTYxBQRNQ_1nwSFQR`sqK)HH2lINp}(OvvPXAcKX5fr^@!R9iyff>3|Bup{u8 z^_+n1Serc)Yn(wVdsh#p^wh?P2C*6va*bTvBV~^wbk~i93;voK6=*)Za3C_VL<}Mt z6b2}~`MAF)F|ApHLMWuLaS@STFMdv_KV)tZgBk)z*K~$KQQ;Jwq^F$mx}yYnNIkG) zVq#O<$OMz`N;oDq- zLz=B5VNjGWbs0pxnBc{O<_6 z(kSj~g>fns2^U1cAzgRG>$xlx0hF9U%lZa+FUH#%F_T(xNTf#|I&R3O0E$i7l7Ig= zQVUFeb7AH%N9VFHU;r^qV@Suu6K#}LM61|RN)qqokYXK_IRezvC-h>X@LMe4{8^-y zl#ze$IMQ7PXG-q&Ls2#d5L+?u6&|pr6ihyu$IQNF*oH^MprquHoBA;Cz1NqRvg_7n z4-iQ;mWKgikA~TMJUD>TY@+bt5v02f5Zcu(zDdg|(VWhjQYn*4FJ&nXGWLW`-=E*I z&CO>VKka&S2(+EGD+MQxOjwgRF|+=@~ITffuVU(k`1k2JryN zyqLuDTr<)ft#hiyv1AcLM8x`vD?QNL(O-rP|%)I8LLBzzCFI^cC>8OcCC7T73#5Zl% zj?s9>fB98OVk$lDt8q>LP0$n_55I6PPEWr9Rnd@3x1nN|C_C6IEL}-K*V0&!U5rm% zau0rY>Q~sZ|BLi6Dn~OI`(Xk0w3fJ9KytA&qpSwSJ4 zJO6qZdcifXa8;6gMojEID?UiUc=E`jIJd12HwakzdBGp&?GU_sIIvH2_k6^r|3=@6AJ?*Go>(v zS*D~G8|eJ#kefaT03v|>Mc?1xlNWyhilX9Yum6Aoa^v~`1j9D))!qM$|33H~QkDQ= z&uy1|6IU$zOFa6@H!#rkXUJzdaM!L+;5R3CQZp+))r#WI9ANV`CwGnHn$azz`Ye|M zcea!;4E`GrbiQt{(Ll%&e=M2Y^E54lXg|oDygE{x|8BWi0s62o>uZvqIP6Sv`l#mtBkg z&bQ&$Z~Tn1VMXCQbhj?UZ%^*RSZN50b4w|x!!swbICm~)j7e%<@9(=2drv%tBjc~a zc5E2`m&WKL3t&&G!fT;0+vgP^X)Y#7Ge~>l;;D&gEF3wtwP} zx-}bc^98p-RTMn9_p{jc^4DmTOkNqi1s}igHsqTM^t&_D$31SSRImv!yN~|@mSe&k z(J->56V|Zqa`uh|{A1T0^ zAZdpRG?+;6!KS20($tV9k&2SqU4O0#oBY$V`X6g zPaXX+j*h=VH&`#rC)#xHpZ^3e4n2#nJ@>Det`<>#Ig9bfI$)848e8g>#3=PeI_74z z=bYX_jl0#5=VJa^L`>2b8R+=n2=oPPF2=G5xS;D@xc#zkp|hnMKRvhw_dffNm^O+W zi`Wf&icbSfVv0MDZHHl0QQVbB@qb$3)SmdMQw0^8SWVk0z~bP>i==&k;&ex(J**Hb znnNpyxp$C?0&N{890nF&iqEb8K02}s@%XFX!u`8HgOW)+nb(7TD8bVf5`o|U-W_=9 z%yanivzstAF^#cp1(XhC_RutZXzhC$7c=(0Qc>ctbD7}`( z*wzB9X)mK^?)zmJH3SeNy3~t_0FtvwEQtP?lhu-e;pB<|sy9ihJ-H0Xm zm3ZQ{hp_MTuV4jsB4mV{)aEf&oq$<#F#01e4giG%jknWQtw^5%5}4dAxP; z#VA%LaB%c@w15^&8$876eind33ieYwTVW1sZfU-*X+=+YPHvuPkgAewKG`cuYk#%; z6R|FB9OzvJ^=wURO769@V0W@HtqBdqr(03l*95yndu7C)N{;#mbq42rjCFGmX#J&Kjwh1bg4zL|wO z&kmS*G%=q+wT1Y*rF#;Ipc{Y4tY1VV_TD}4S`1A*YYBsq9Gq}6w8=EXxC zFl;6*alcYsqnGi!cum9@N-lxzxwRl>-lWM@JZZQVa|#r@ z7cCvsC6D0oOcJb$0bK@6J#fNIZE)X-n@4X}qrOgVViJJrAExh>B*IgNF`|Ve7i0M$ z)icRCi8Nu5Ml~o%N$Vv$0dV4ks1_FRL9*1ulF*>89wiW~c>pLTP)tx-V1LOI-n3AE z5)`_k;KiUJ`Fd^uEnM<1nx=o+s}I%Il!W$iZMYi;zZxR4-2^P)z-p|$ZCU0$Lu04! zrcanP=;oUj7rH;Jr!rpxKz__ypYcp>h&B`~R0dicm{HkGST2kK%Yjog40F@y#OX%> zkmqb7KbDpSy~NFD(&_ZFLVn?QG)-Su51qITic1#m)Ny@9KnH7a3v&tKV!P4vHf?Lq zI59yd!=3C^ThbrWAChKM8VXEX#g%d}{a~Ow&9FVAA_hZ)CwT29W^?i^!8m`BW;k zq@}6#U7D(|a1s?}xwD!ZL*rDdTf#N7t(=rZ~tJAv-!}vWEOv0f*=;h7JJAirs zk+qQ`FS%rD29WjM`;Sf3XTP_z*&cKln0Xq99326Im=k#>kmwG1&-}vzQN@cpB*G-} zs08_+fJ4?A02^7kU@ML8u2GMje0;A|NdYkxz~uhr3`wk6`?$_LJ|H|eanRPTGUAHq zu>-jc=mL|Y5gnEGWeVki5Xwf4GqHp#{{uB^fShxIk=+fwm5J5VKhXYTsXVWXO@_9F zLG!v2A-rdQhQ>~HP9|2b^I2!#ERmdLw+O2L4|B1x_g%aYMF0Q*07*qoM6N<$f{#Rg A2LJ#7 literal 0 HcmV?d00001 diff --git a/src/en/mangasaki/res/mipmap-mdpi/ic_launcher.png b/src/en/mangasaki/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..c134edf8082b54c4a5168bc4037ec22ea2f3d9dd GIT binary patch literal 2517 zcmV;`2`cu9P)Px;k4Z#9RA@uJS$k|8M;ZU^-QJyj=d*olyK$VvulN z`EkD6Mf2L7*@thPR9#Eno7vf!@ArMb?=iC)KEz7{V0}>Q(aAKBoA333E*3`U%UqBF z@Vx9Zo7@$8vCsp9Ay$zs0DwAQ7}-}lCX7+Sj0vO=w@ZZItIQRw>C3W#`Vw&)Gst~> z0Spcf)*0!RgQfEF9?LY-#Pclr$1eKI;%)kjbdvvegEd9BX2BvNkT>mqHlDOKSTOk- z&P!}cO~YI)7JsgyEq!NXWTaqgl7mzL@IL(`TXzgE%rAV!;;Yd+AF1?F0cA;@wk+sM z?@$EN~iX{R<1ZXK_bD|N!TO<3%w#qOldjNmUk zeWvl}(l|O^(zIJaq)lej$ertqScbe5i9`#d?r<@EVN4-Yq$s>w@>P5Q5u$ zVwv0ANw}5VoL8;prH}9-N5!&IE@dw^1DI9-xWWrbZN{daYjVVUmo5C7fcs{)`F0E|t2o0$cCgjf1q!aF8+3F;P{#2prv96)4c z0g{=Y6P;L*fv*aH$9!X;_nMsS8x9cRgk%8|#9V>~+}FHX_6X13CE>s?`l$1W&|3|F z6H}=V3=j&rEZ}MT`h>_4A_rJNl*fBhgH`dNk;p5O`P5wDSSi>7j=IS&qrc~B3V@5@ z#4MR3Jo&KjDvh>GM4Kw8-CRVXa|w~UGN1$ILIkA=9gA-#u=s8b%#uC3K+CNsHy!#A zYmMhdn_*RRVhMok1HuBNwxBVd^Hs*A)l`rkdLOl0=b`DGvzaBNyA&*+$YwGQ(q zlZsQz%J55m6w+>2{l zZ^WVFkKj__yd9ZD(MM8DB3g^ankJ0TjUxZ&Gzzb!9k25Q2&TTO77$^S0I*$H_E0-A zIY~~7S!lWMJwzK=jYTxR|INlmydxwoY|@$=n(#5a!a#Axmu zvcoMXPsU*KddtrTCURpTGBIHEb`2;#;FQY_nZyF|_9ZmkHAxdUS)4dhUAzH99k=2? zGjCyJ@;EjcS0h&(M}BFFVyKBGk&LCWy=@5pojr|rrcR*v_Z0HK%XsT2n)R9gtQr7Q zKBEwKRXc+UM@;VE^s%|lvh2Ov9>Qn)@4^1pzl8^`KZwcVCG0)=DJ)k?wEwQ_9>gnW zoLVwd%eD_bErvRF2Tj{gkpZN`TcJIOC$L@z|0+WZDQ5uT}`hsEs zzYUG>fu2rAA-B*X(~vwMz@%@=qwW)Pwxc>l9`MPo&*4J;49-rUq*Lpfjt6dd0!K!M zac25oXh;}%c<5>T__cd5voML7=MBuiRZA7;F8;^@p((VngIGYl{E`|Ok^E>8jk{+( z;nJwR3eSJxB#O&(xZ{QEP%ITd`)>O;o;i5{hyVE)Qt^6x@8iSx$?NxHX5l@|zTAl7 z@e~u@wFA5?0A33?RiuEYx0cZIwJfQil~5beBKXpleW;7qWBAPt2MG|=M#wYQMHy^@OVFKBotwAZP+uK(+3%nHa zp3Ko=jsS2|CMYkE_?G-w0S&wIe2C-ehd%QcY--t#J73s_3;B1P(+f_Ic%%jgZhi@m z{dF(SpS_6elWX|tg=$T)b~qoEG6)@J7lB2HxXB+ld2#N@M8{^8l>_}IxnI^uU|sui!;#E6+|LB9vONX`GrXwd}ALf7B4lVI*0g4 zc`AzB;bxSlb-RdjbDy+jCtleC1VCFiO=Kc9Ihj~Kg_FTJ)QHrV(Xcy@n!ZI=0!Y%x z^$ihd@oWOKFEyev8|7P5Khd4Oa6SMS9qTr#wUDczV^i8&6lVpB!vx`0tYZnuZSzQU zF9J0t+gh4{xujuvEROl(Ni4iw15}t&yk(0QOcemsL1`3frxx(PRGo6$O1m@W@Y1^x z6T~W7+ys_2l;@(bN*Xz_llK1F#bs-Jr-vLTn4-gjjX;YR57` zq58^v05CSRb>*m}@>Wbld9GetaJ9yh!XT%a9etUW+;#rStXH3gwg3en2`mgG-#t{R zatxzdgMnM^721i{ukEA&WO}GHVJ!j3aX{7|RQUNlTY>T(d{qI6P5lNAz)#E0tZHFr zhg@aP;51ZFt_m!qDXIbxnRtCGvw-_@qKj(&6*X>ap^DHUFog!NuC?QW1}zmNa1a#~ zAo3@pkQ!Epc@PyRa%1f)d>`O>Ktp;>Q`@i}joq$HxPm|{SwNm6gpvcHmMfKKb2H=Q z6BF6~*%a{lsfGlsL`RE}c~p<;yDT8-JF6ccp7H@Cf;d7eMuyxk*9~w8twO fpjA;R+*Py0(Md!>RCr$PT?up?#hLzk4oRbHWF3}m$(AhH!tzBh4#tr9;4miP@RD74VIky& zknF6mM+p-R8hW9mBDeZoyOf1!FH{w zx#^p4zP07;=0P$#9>$s#{E-HDO^LI5fkoO0UcPm6iNcW9i5t_0dIww64? zs!A-J{ml3R7i-YD(;{Lw0LV2LHnLa`DI1AYyz{}{_s#$?3LxX=l)Wr~aDNy;&HUL5 zdb8PVm?v1x0Npj$jeg9C#Y1Rz-u0vLe#-L3!+LM8eguQT^uFF*Qve(TkOGvPC@}H@ zfYJ|u=x_cD@UEx;-KJpZ#w*4wvlG5``0 zCET2`3;-1X>SlM%-_Her6Y_d#8<)mBwLc$B$~tqaYw_|eHu{o`fV6Hqsjs(hUkiX? zC`dr15fS(04uFCnR1g3r%zO!sT8nIH3&7oO8>UhaJ)57Q{Kes59|4F;0w*VUe z!uf#RMqTL0&VOEcA1>%JAti&dFAH#){d$2rE&zyxF0uw$-WLzXfJlK#@>(vA*GnK$ z*KOgXoqAYDss(D|nRm$nm^E{*gM!?mA2(3!o{aA=#LiBZ{yeqauHi2EAK3|*(d**| zfH6p`t8^yaOmVU!Az4VGO176)r#SMF(q^fNUB2N`#s7H#dZq#@XC7b;NTtJ2y9M~C zBPwlyuF;4%|t(#;O7WWF!~IBCWlp$~B7d)^3y zk&&}2hOmP58C0BA7xG(SHG!YRhutVSt;svIg8#8G+5D1x;aoo*QJ=B2@n zMrjo)Wxm`<5Q&`;#9ysMngF4vo9K$0m-aIjFG{}AI!JrExr{piZh|)i%0pKs;-TVI zRFq9iqGovv;noxg-@D~(3`o4zB{Bm+9DBJMqi?YaWo$)g3%1>|9Jr6MzW5brv-wNZqg%=cICY!V zWG8gSz(~YXf7u`cm3-Qb+OI?LWoCZ{3ZYnsMJ=qSF=Ia!XAo z7Pc(I3%ediEIFu!s%Zs7k552id*t{4pbJVm3K9X}6&dBPi-k{AK6>F0s!kboXue_U zH=J=VF6sWViSN+Z5#0RzXYkIEtwOrep|^3niu1d!z&AemUwCovQ@DH6S1_39qh->E z!x(&|9+{!MKd{IBUese;Kh#g6pc1YL^8oM`zQ`V|6hmgY4WH{rD4OL102OCW`xI{Z z#Lp0|XrPtGQzN)_{pEP|z&cld!BUSQoQ?^zaqoFgVq$eGR&TkLT9WaKZLG$~x~S!fcZ-)^C*t0A^Rj%;~c{DafiFeB7TbgY_nHCk#q z@YdnYc;JoiB9S>Jv>FlblN8v}_Eos~%pYURfpxfj!&UmuX_clc1|Dui_NYB=!4IiL zzQF{bsBJ0Ct_T?bJc1&wpa^Ku3kPYc!T#dyz6b}(Q5R`Mw7ed@BfAk#kI;I%8c)XZ zwpDnuZ!=yyumPD|%2D6+y4jc-oq^YSH()e1g7*4u#8WXGI<}9NHPRNbwRMPZsTKmu zbMmbAlfO%20W1LRvmA@^>|}&!l{4UE9k8X_`5pVJil#63Av`H(9SP#d&l{1o zIAbmRcH8;E1)x+EG^70_#s|0sPtNsQH{#VzGKb7 z=^Q6P7FU|CIRb=o+?5_XD4{?ZE}L^5E}nHYs>`BSzw2@Qc*`vaDnVS*{Uyw6UX0(r z_b@i@S%aKy1um$Baq{FdP!Wval>^VCJQTswwu`X)=nh9XJF>n8BkQ$j$S?hr*as*T zfI2}0fS1s%k&zR@U|j}H|9TionRjx{s4J+1&{8`c6CzF6HM9e<#Gsi(3kJf-=F+Cn zW;LCPwrCe#+5a4d5=Sf@Ad|Y!ee7l&9Xo{%IZV3o5R`Hz%`0%{?4<70$xHE%v;PH$;yrj|+r8+I_gbAe zfX2!xSbf2Bm{QY$7j{2}+g`ZBl0{uOWjXFT_fZ6(;FcFYi_JaHngAqrR$%Bi4Ip%+ zy)+>iePFi@@MKYP3hHcQeSkX`d4XfOt^mz99zw91IrJxpfQ(jKYddkzipMdvb|(Gm zrF~D~n;XA?(eyD(BIoqh75MHs|AUHPCG{0otvL+`NwlLo=DE#_@Wb<-r0I>@)?bMY zd)Al(OYSYhz=Mr6MPX4U+x8F9SU(g13Z)}53oh?SI&%CXE1EO$H2mP)-=Vgmo)+mH z*@GMYa1r(mzh~j=`p6{w=lN^VQ9l>&4{XDi)-J_ZI&QW@sEp*8$eet4BE1 zwKXmS5L<@uf5Yed5o*c^(-lT}BfmrFgG{Qr8a{?M4!wlG47{D+Q6Zd9SUXCb^!*pU zNK+ekZoC@nc0EelS5)9ANk_aYmyY0h#L@#Wt&7eB!~v7bc0>u@tT`)&>LpGJ$=_-X zQ#xGj{?|3S;LW7D+M{4m%h`yQH(>pqHFSbT?#_(`XhM!G zSIUN+b`Zu503L<#G{C)_6-M$Y*qlQBl>=rp#QF|BepeO+xP4wfY|GNa+`u^nf10p&C zFtv6DR$uTuYRl{C9AV?$C+Phn8)^}IzSi6Ex@ca>Enxc8nVzW#8K-M%w!WE`4f%r; zGMW|Cr!CtVvIntg z-_!WfD>osT8AUc0z`(B>kvc%mr!xfTm1`ewCoBViHfWKTAmN|(WF2Ff&!85SJ~KfJ z4=d)4(d9{!oO7cwlKW|m&ZLVo9}I0XbNVcGd2LlG3szuCO&j{+`?X0NIoiIt8pF>< zrBV=X)O*}4z>8wcy`H8#wLeJKl13bCikBc0gtj|kVVrJ9S?X5GUe1QENuD1PEqZs-GDnd7kPD3UT z3f+vWsk`=Hpf*D-p`x3FhO9hP)J2-`{c|71{N}~9_80d&iEqDn4Pq&BAjK{}>){SV zt1aurX&|<~7RNSK(|w~xM|{%0g?mr3qUf6cIB0TNjEgLNVGm z;&`$>vF4l@B6G)}gy@Q`DcyO^WP$#RG!OLq_a4GQeO=cMmJ<+Fqc(k2kL-|+zg&&j z`f8}@fa${It)1`l3Ic#*UO_-x4{!kB(=^TfH6|9CMd++#am*HS2&t%A7)RA7Mzo#M zyr{+_duoi!&iT27Lc`6`tyNmihmOfeJIj&{zg!6c(4H01*3v0QL7e`WvA%6hl}cY* z**692TzA!ugN9nts97?C@~%YQIeV@fSgFg5x^e(nc#l0-i&Rfo+m5JczKH;!9f{3T zk+-XK4*Ej_z-qeUkd&UYrDJ6DUAG9$S7_H*>r1o) zhH)61U8siYD^f~WL1iL{bfk*tf2qr zMg#N|r9pudX5y>pky$N0KqEHGb1VIbUv^)Rk5q&KfFD8g9H86QYGYo&8>;57^@DkO zC7S1WbCN^{6Ja++(Kx#C;qnXxfyHf_wl4 z%%mED!I|+MpR(M-K}{hv8nZZW<47$d8)rTGJ|zF~rYAn06r|T6O+m5%h;lG&K8FfR zAGD|gUNUi8u;E*fduqc|qQU|t3q!dTnLfY`0CO$a3r>9yZd9Xz<1UU;2%lAg!iBHh z$&=i;SpXfp;WN1cw{06>gl=?JG+=kCagdBzjnFT-K8vDQvGeaYz$gF!cMF(0Wx9VK zz~Nz$gLM;!Hk0N*hS@DBD0DST)E7}u%`0C30M=^s#!L#51;C5jjaIy9#)~3~ry)P$ zbP|o%-9-bS3(6A!S%I_gdIUYRs9(*_11nxdD};2s1TCtwhNm?uL@}(vP`2|2;=wdoyyL#eMPRUXcT>K3H>ROxI zcSBLaY|2YkK!wtfgX<;t=1XbvxD+yi0;CTQ?4J(cXsMo_9&MS_woZXEOA`wHx1b@& zrn9}ud0j84bEUg!=b`@nXX^lv-;pW!@%3c+x*S05#QI4$g~R1H^83io|9C|!g;>Ui zB6vyOH^!67q<%1Xw2wUhAO;2G@lXH3e= ztGer|qrV6SL(|C4HdfF+l|+l<#fGERo##7?y!^H$D(|-*H_%8*KAX+%8yOwCCYem` zVEDhNUr{1$5-T7-X)T00Qk$6zj9TJXA}XLVRv}8840YtXD-w zRdahXxzr!xv17kVBTbI#kb@57z!`a9g{ygcSpaFDlrerysgeSrpo%=+P5+6j{9^|_ zdt2%PrPSeq`ev+$5}F~-mI$4^$&*Kj@QL$vL@R8sWdLA7AbYln;K`d<1<`)vL2Ct# z!0jfH&nPqk^X#C1t|G!E8ct}22%LaG-UJY?@a=t&1waRZK0cLL19`K;_fwBU4u196 zZ+TC_7hZr`fI^;Dtbss;Zv2R+RGeOj;K)7XZBS1kbqI%i0tr_Z7DLd6HJI^(Oa;XX zuh{!#`gp>Z(SOjnpni_C086LOrK_nRIgQ&*;|##K^;=x=M+~VG6M&DH5Q|Z>6BB@9 tMs&j5E2l*tEdb=kR3ro?Zp5Ry{|7eaT}K2FWwHPO002ovPDHLkV1id;N45X} literal 0 HcmV?d00001 diff --git a/src/en/mangasaki/res/mipmap-xxhdpi/ic_launcher.png b/src/en/mangasaki/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..c16147bf7e25f49f24391f19d0675038f4b2cb90 GIT binary patch literal 10380 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 literal 0 HcmV?d00001 diff --git a/src/en/mangasaki/src/eu/kanade/tachiyomi/extension/en/mangasaki/MangaSaki.kt b/src/en/mangasaki/src/eu/kanade/tachiyomi/extension/en/mangasaki/MangaSaki.kt new file mode 100644 index 000000000..a7b40629e --- /dev/null +++ b/src/en/mangasaki/src/eu/kanade/tachiyomi/extension/en/mangasaki/MangaSaki.kt @@ -0,0 +1,265 @@ +package eu.kanade.tachiyomi.extension.en.mangasaki + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.Filter +import eu.kanade.tachiyomi.source.model.FilterList +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.ParsedHttpSource +import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.serialization.Serializable +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import okhttp3.Request +import okhttp3.Response +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import uy.kohesive.injekt.injectLazy +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaSaki : ParsedHttpSource() { + + override val name = "MangaSaki" + + override val baseUrl = "https://www.mangasaki.org" + + override val lang = "en" + + override val supportsLatest = true + + // popular + override fun popularMangaRequest(page: Int): Request { + return GET("$baseUrl/directory/hot?page=${page - 1}", headers) + } + + override fun popularMangaSelector() = ".directory_list tbody tr" + + override fun popularMangaFromElement(element: Element): SManga { + val manga = SManga.create() + val titleElement = element.selectFirst("td a img")!! + manga.title = titleElement.attr("title") + manga.setUrlWithoutDomain(element.selectFirst("td a")!!.attr("href")) + manga.thumbnail_url = titleElement.attr("src") + + return manga + } + + override fun popularMangaNextPageSelector() = "li.pager-next a" + + // latest + override fun latestUpdatesRequest(page: Int): Request { + return GET("$baseUrl/directory/new?page=${page - 1}", headers) + } + + override fun latestUpdatesSelector() = popularMangaSelector() + + override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element) + + override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() + + // search + private var searchMode: Boolean = false + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + return if (query.isNotEmpty()) { + searchMode = true + GET("$baseUrl/search/node/$query?page=${page - 1}", headers) + } else { + searchMode = false + var url = "$baseUrl/tags/" + filters.forEach { filter -> + when (filter) { + is GenreFilter -> { + url += "${filter.toUriPart()}?page=${page - 1}" + } + else -> {} + } + } + GET(url, headers) + } + } + + override fun searchMangaSelector(): String { + return if (!searchMode) { + "div.view-content div.views-row" + } else { + "ol.search-results li.search-result" + } + } + + override fun searchMangaFromElement(element: Element): SManga { + val manga = SManga.create() + if (!searchMode) { + manga.title = element.select("div.views-field-title a").text() + manga.setUrlWithoutDomain(element.select("div.views-field-title a").attr("href")) + manga.thumbnail_url = element.select("div.views-field-field-image2 img").attr("src") + } else { + // The site doesn't show thumbnails when using search + val titleElement = element.select("h3.title a") + manga.title = titleElement.text() + manga.setUrlWithoutDomain(titleElement.attr("href")) + } + + return manga + } + + override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() + + // manga details + override fun mangaDetailsParse(document: Document): SManga { + val manga = SManga.create() + manga.author = document.selectFirst("div.field-name-field-author div.field-item")?.text() + manga.genre = document.select("div.field-name-field-genres ul li a").joinToString { it.text() } + manga.description = document.select("div.field-name-body div.field-item p").text() + manga.thumbnail_url = document.select("div.field-name-field-image2 div.field-item img").attr("src") + + val statusText = document.select("div.field-name-field-status div.field-item").text() + manga.status = when { + statusText.contains("Ongoing", true) -> SManga.ONGOING + statusText.contains("Complete", true) -> SManga.COMPLETED + else -> SManga.UNKNOWN + } + + return manga + } + + // chapters + override fun chapterListRequest(manga: SManga) = chapterListRequest(manga.url, 1) + + private fun chapterListRequest(url: String, page: Int): Request { + return GET("$baseUrl$url?page=${page - 1}", headers) + } + + override fun chapterListParse(response: Response): List { + var document = response.asJsoup() + val chapters = document.select(chapterListSelector()).map(::chapterFromElement).toMutableList() + var nextPage = 2 + + while (document.select(latestUpdatesNextPageSelector()).isNotEmpty()) { + val dirtyPage = document.select("div#block-search-form form#search-block-form").attr("action") + val cleaningIndex = dirtyPage.lastIndexOf("?") + val cleanPage = dirtyPage.substring(0, cleaningIndex) + document = client.newCall(chapterListRequest(cleanPage, nextPage)).execute().asJsoup() + chapters.addAll(document.select(chapterListSelector()).map(::chapterFromElement)) + nextPage++ + } + + return chapters + } + + override fun chapterListSelector() = ".chlist tbody tr" + + private val dateFormat = SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH) + + override fun chapterFromElement(element: Element): SChapter { + val chapter = SChapter.create() + chapter.setUrlWithoutDomain(element.select("a").attr("href")) + chapter.name = element.select("a").text() + chapter.date_upload = try { + element.select("td").last()?.text()?.let { + dateFormat.parse(it)?.time ?: 0L + } ?: 0L + } catch (_: ParseException) { + 0L + } + + return chapter + } + + // pages + override fun pageListParse(document: Document): List { + val jsonString = document.select("script:containsData(showmanga)").first()!!.data() + .substringAfter("(Drupal.settings, ") + .substringBeforeLast(");") + + return parseJSON(jsonString).mapIndexed { i, it -> + Page(i, imageUrl = it) + } + } + + override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException() + + override fun getFilterList() = FilterList( + Filter.Header("NOTE: Ignored if using text search!"), + Filter.Separator(), + GenreFilter(), + ) + + private class GenreFilter : UriPartFilter( + "Category", + arrayOf( + Pair("Action", "action"), + Pair("Adult", "adult"), + Pair("Adventure", "adventure"), + Pair("Comedy", "comedy"), + Pair("Crime", "crime"), + Pair("Drama", "drama"), + Pair("Dungeons", "dungeons"), + Pair("Ecchi", "ecchi"), + Pair("Fantasy", "fantasy"), + Pair("GenderBender", "genderbender"), + Pair("Gender Bender", "gender-bender"), + Pair("Harem", "harem"), + Pair("Hentai", "hentai"), + Pair("Historical", "historical"), + Pair("Horror", "horror"), + Pair("Isekai", "isekai"), + Pair("Josei", "josei"), + Pair("Lolicon", "lolicon"), + Pair("Magical Girls", "magical-girls"), + Pair("MartialArts", "martialarts"), + Pair("Martial Arts", "martial-arts"), + Pair("Mature", "mature"), + Pair("Mecha", "mecha"), + Pair("Medical", "medical"), + Pair("N/A", "na"), + Pair("Philosophical", "philosophical"), + Pair("Psychological", "psychological"), + Pair("SchoolLife", "schoollife"), + Pair("School Life", "school-life"), + Pair("Sci-fi", "sci-fi"), + Pair("Sci-fi Shounen", "sci-fi-shounen"), + Pair("Seinen", "seinen"), + Pair("Shotacon", "shotacon"), + Pair("Shoujo", "shoujo"), + Pair("ShoujoAi", "shoujoai"), + Pair("Shoujo Ai", "shoujo-ai"), + Pair("Shounen", "shounen"), + Pair("ShounenAi", "shounenai"), + Pair("Shounen-Ai", "shounen-ai"), + Pair("SliceofLife", "slicelife"), + Pair("Slice of Life", "slice-life"), + Pair("Smut", "smut"), + Pair("Sports", "sports"), + Pair("Superhero", "superhero"), + Pair("Supernatural", "supernatural"), + Pair("System", "system"), + Pair("Thriller", "thriller"), + Pair("Tragedy", "tragedy"), + Pair("Webtoons", "webtoons"), + Pair("Wuxia", "wuxia"), + Pair("Yuri", "yuri"), + ), + ) + + private val json: Json by injectLazy() + + private fun parseJSON(jsonString: String): List { + val jsonData = json.decodeFromString(jsonString) + return jsonData.showmanga.paths.filter { it.contains("mangasaki") } + } + + private open class UriPartFilter(displayName: String, private val vals: Array>) : + Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { + fun toUriPart() = vals[state].second + } + + @Serializable + class JSONData(val showmanga: ShowMangaData) + + @Serializable + class ShowMangaData(val paths: List) +}