From db1d8e26f40fba7cb0786341781ab4ead9bf1839 Mon Sep 17 00:00:00 2001 From: AwkwardPeak7 <48650614+AwkwardPeak7@users.noreply.github.com> Date: Wed, 29 Oct 2025 18:28:09 +0500 Subject: [PATCH] Rawkuma: rewrite for new theme (#11270) * Rawkuma: rewrite for new site layout * update icon * filters: use callback to not throw * deep link * fix index out of bound * return if empty * novels check in deeplink * Add `@Synchronized` to `getNonce` --- src/ja/rawkuma/AndroidManifest.xml | 20 ++ src/ja/rawkuma/build.gradle | 14 +- .../rawkuma/res/mipmap-hdpi/ic_launcher.png | Bin 5252 -> 3816 bytes .../rawkuma/res/mipmap-mdpi/ic_launcher.png | Bin 2925 -> 2373 bytes .../rawkuma/res/mipmap-xhdpi/ic_launcher.png | Bin 7036 -> 4664 bytes .../rawkuma/res/mipmap-xxhdpi/ic_launcher.png | Bin 13050 -> 7946 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 18379 -> 9612 bytes .../tachiyomi/extension/ja/rawkuma/Dto.kt | 77 +++++ .../tachiyomi/extension/ja/rawkuma/Filter.kt | 103 ++++++ .../tachiyomi/extension/ja/rawkuma/Rawkuma.kt | 320 +++++++++++++++++- .../extension/ja/rawkuma/UrlActivity.kt | 29 ++ 11 files changed, 551 insertions(+), 12 deletions(-) create mode 100644 src/ja/rawkuma/AndroidManifest.xml create mode 100644 src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/Dto.kt create mode 100644 src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/Filter.kt create mode 100644 src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/UrlActivity.kt diff --git a/src/ja/rawkuma/AndroidManifest.xml b/src/ja/rawkuma/AndroidManifest.xml new file mode 100644 index 000000000..24cbded35 --- /dev/null +++ b/src/ja/rawkuma/AndroidManifest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + diff --git a/src/ja/rawkuma/build.gradle b/src/ja/rawkuma/build.gradle index 44cf6729a..4cb0f3b59 100644 --- a/src/ja/rawkuma/build.gradle +++ b/src/ja/rawkuma/build.gradle @@ -1,10 +1,12 @@ ext { - extName = 'Rawkuma' - extClass = '.Rawkuma' - themePkg = 'mangathemesia' - baseUrl = 'https://old.rawkuma.net' - overrideVersionCode = 3 - isNsfw = true + extName = 'Rawkuma' + extClass = '.Rawkuma' + extVersionCode = 34 + isNsfw = true } apply from: "$rootDir/common.gradle" + +dependencies { + compileOnly("com.squareup.okhttp3:okhttp-brotli:5.0.0-alpha.11") +} diff --git a/src/ja/rawkuma/res/mipmap-hdpi/ic_launcher.png b/src/ja/rawkuma/res/mipmap-hdpi/ic_launcher.png index 3a331c5bbacbe9d7b5a6a7c6270e7dc8116d83e1..e8f6229248f04130fc2830deb396f43ff61181b1 100644 GIT binary patch literal 3816 zcmVP)Ei7yq zq$;J=I#j4uZ7pa4MHC7IgG^yEB+Miv`TuvHH~e?s_}?EAY*+4DS?lKwci3<5bIv{Y zUJo@DM+7`g_&6ib1W*`;Gy&8EP;5q|i9vB@(EkgdLASheGhk1r@lRyruXz0;;dK9!4PGJU*-Xq_#btU;=qgrzFzOGgU{{ zm#?0799JDH3kQ(5%S{hvH|toi=)~E&YXg4D2zY|cLfuByLA8GAw^l;G9iNe(3JNdk zehW3~pRssPY+HC(U!U|)ozLSrnU$Kjv3cdLDWz|f9N|xG$0#R&JlO+Aq_^o?xU%9* z{Y}z9Y&sDdq*rdr?m2gZmm86Q=iV{EIsmnQEC!Efo$t$im7mE?PyD!g_nOfs*S&JW zj!8}cC3Kqj+aI3uWi0jwsil#JZaN}%#>5l_#%S3i*5~en2<%oG^?2w^3-8&<6|1NI z8FwuO?F3L#n_Ct?-gHCnw&E?{Uzwj zxkv!w{-kapN%bqGKeqkMb zwYMtNDT&cFr=AI{d0;kvoyDKYSliVJfO68Z$Cs3NQ(85*~uO&ME zDVo`XcKmu|L_^~WGds^KT5F{uUkXw7K%%rxK*(oXJCEUw4f|=rQy&Tdp}y)9^8#xh zWPr{@2oR-Zja^vcOU;_5*4RELjW*94t?vW}DD{4UoypYoxBZk=bf}8eqia~!mnxx$9;adew7k&(szH?gZv@$O znrEP#Aw(VTCQ8l|jHaE@wfxBLFEaCL4ifGC9nsOZ1(4u-25&|mTAS)(fR=q&rZGNN z8>BLbhsX??CrV5L=m!9ZBXut5SpQX^cVG8|6rXhR)pj*9NR|I2`f4f>Gg_7F_Zg$Fl!5qFs+FhFY<8XCFmn!J622`o6O!$Z2Y_Do zv>Xdr6g@xzNbF<`5{n2R)dsy|qV`Mgm(s&4Kc|{n%@v0dZ5V`cCZbMlrj6=JkKfwQ zJWK{>KiqiPJefIMByf<1Y(;Wel+h-dTM}P{4Ww|*;GJs@>1qQxD-t-pzilI{{VO1=$MxVyvSM!qTa*Z!6Jgp{ z1xWr-F-k0LGC0gHU?+MjI4Y26>V-iJ1X9Y{4Ki zK+9nir!U(md9mBUoVgS2yp@Hlcy#ICBO34~HZ))bBgRtnygm+!Sz_@3XkWz{dU4GT zN@?b!dq?!J2m)1ag=vD3Ig-HwFr5+5cPK(KJ~ogV1R!YfKX3 zF`heLPYJNh%@Xx%S5mfPKL>&AtqihK*~0qvrC}0^Sg8FShJ1Hql!_}rDWezg%4%pX zrU9fRacUSKB*@j2E9Zj>WPn^{PkC--7XAQ77b>_rjf*zY37*Q|Xw(ATT+A9EM75z+4I6+&y-Ars444-j#lp5Km|Dlr_CtLt&m$zZe>;^XA4T_2y#;% zk>rMyYXov@5P;Ma=wz1Ilmcx4k_}QA6q<|u&0b>Vh;w!V1kvVjZP|l}dOc5+1X znN;iVh0Rf8oN$34ufgp?%p`d?WGK}-B)P$^UE=KB;s_9>C5>bwtubiwFeiXG+0F}x z%%Gl@o?RLY+Y_FpAI1u-SQ4-bk^c||INADL@hXEP0sSXKoW$M@a_cb3R&EyvAR*;i zU;~i2F_9&<1sfbBxpAIa$lUjUF>W_8yglJ{_%DA3xqYC#uX;Ct#B$5~k)?NQFo3xE zDYgu90g#awoOs_^A{$-yZfcR_ro=d5mzU zNhd;LUW3FIS{msn0FvYe&%|5z4!tMNwdoU9+5O5+&=kP)B zj28ePEDf8ym}rB-Z2Ar2{+6FYZb;Qia#IU{>hVN)xpDP%$Kc&qZtUHJ(t0Gq2VO|b z3SDdvfYdl>%CN4q@J>SJ?^|^kS^EDPg90$E{*OgiqxI^ohL4pm61|YRY94C@CLLEg`QjBpNfx%7n z^nwwzR#>y^^_*^LXcCOHy6hA4sz%~SnL%nSHtxzx=#^=pyIRg;RpV1^!K*Hpuds2I zHZOE_mV?vXIs}tt$oX&*%`fj~mWvPyxT&34clnFh(12AJ!AOsq^FF=3>3~*eEGw%C zHv%AG*{2;glJ8zLUhAG88=`oRv^qaxqsV)61f%F?EV^g-YxuFfxN1Fsf`L8pS>ynv zc9a(tTLT=Hs8Rx`yKT{{bmWA(6D`JdF(W|S&Z_A{X!L;g+ED}ssS<+;pi$o8nt(t} z7*b59IoQKh<7=PVinBPv{zE&|IV-@1Iir_pBRPY!di@@{`I&#{Ss5#XNMI1xd}-@+ zTK>Q_)c?{P%q(IWe#GR8_5}v#lO0ECG7htp;>3@x)WooflNm%(pr`@Ca_*X!Ne_?h zMK=%XgcZ{7Hb{K@>9uv=(Ck%TP}yM|htip{*d&&kF#L%bl$tve`+lShxp?Y_|If)t zqCTBkQdU|sKxhwCB<9s>b3-)D;l3Wnfx6A#9HV2W_^g~|@q5oz%niIZ6RF9Fk3&&P z;x+e;3uaw5KbYXd5<~bBZgAqZJF&KK?}cwU$|nMWv%bpG`~B;m#{L@VK%MLJV%%af z<#uo9>s`2nn&%>uZe83A&JGxvl~E2Z9ojsM38FfT;0?qm`L7fYyjM}7X&0hd~#Rr;eUOwZUBktnI?e3z}Ey& e6F@O3jQ$HE`bxpUHouYp0000fv_bckjSPiZUm4;T-bRUf+CEL$^#S-WYJM^0*W9gLPiBQ#sxi$ zD>{nrJ#j;D23dr}1d@E$y@P{~>*VQzKQPD$EqUno?Y?v`Qun}ii^6XFJsuM>K%Fmyo*DIw=@__Lck2Mi zEnKI{_&d(&w^D7v^(;vfAitaS%+{%!_y;{O$YXS9kjkptDSJC_>r~i7olGx4be!I? zp~@f`|A#?H{jn~e9Bk1Hm`Rf+#qm6Uqs?X;NC+`|RwM|5s_S6i2e}AQmrwm(I+lah zylUTzcZiqtcb@0%7K^38<#K&{x^`J=YAUAc;grq; zkuf*YVF zRe&@i4+%h~m1+;xMcN85wSc5DP|i@BQ;#P2oK$dtl+O?ZAuvDzOiZRhYH^ER%@Kv7 z9?I)WGcR6)ZIhCO z9WsCfvxY5g8GI z7hil0`KNNgbJPKemzqfiGU1K^)ITN5WRwG>8ytay+0qqTpMM$$4*ZC`++4)PM53~$ z87Tu&P+oo!ix=O6nJdO_J=A%3sq{cr=VWd0AybduSBjZkt8FM}M?cIyX z6R$-{X*quU`3z>voQ8~y>9AU3)qzob>vFm9_16cmYuCF-hzrBS^kF!bdj_q!;?>L1m|eM$SeEfNZvU-_4E_C_12lN*=XMByYxB` z89*EaWsa{INpnC{vJ@Z{8~3uRB5xAo3l7Q2L-5>lPvOb68&F+Shwa;*!Kn0WC94R% zh*DqQhy@Flqx9@qta)?=PMpZaTW`M!1MkoTNL_ox9d|mNFH}`k(Lhl>4${zZ76+yD zPsuVGj4MMiF*+YDFVK5jLKvn^osQbNdd!(K3%C8(G+ibYY|!b`MR;QEMqG8(VC>$# z2dyoa8R2uB+Y<(ezm#CPTrT|pNvuc&C?zFJ>E_iUTBT}>97I0=$3MHc?9>+kdu4zDHs~z_*xChgx z-+~wo4Wp9|9h#1sn)BeP&TCdGwSQ|jKpqZ~YLKdlsnmmf1Q>?>`#(oo+5kU*91aIQ z{`hn3dG8+>H9QSH;;pc?IT(eRO-9(->^OX)0Lf{CnFhwjvZAKnHDkt|IDY()mxnw9 zw7^oXp~C?2Jg=IpN+neTj=Fk52*RZ~qa@nll@jnX^;@%9wo*{`IeKXwM^LH%}+@2S`pLfl97XNl8hn zUQBJ5lz@2v`s9;6xaOMSev8}j@-CdoKY@v(hoh#p9@}2~1XZ<-tY{x*HsPK*H)G_L zsVFJEfbWkMV(;E}!Bac(K3wGd$&)jXlXIA95YKV4x{?|lC^d^l((Miul>ljZF);y@ zx0ghK!mxSsCd{3CyB|Pn*FJ+N-i9GpBtdWqC@d+%=lc(%vZ@wSCtZgz*A8JM-Dp4qS!t+f@ne#AiU9N!<##qr!CtXOb63U$}4)cg|gaqQakLX@(Xz2Fm7jnwU(rSR_qN%rDi@Xc;Sc$(L>zaozPdVDsj6 zNJ;4j7W8sJTbmtUez_l?eYy{Y1%>F{w-4sezXM&ncEKl~e1W4s9YIWNEGAF68F$}( zhpaTx*w}=Po3>;3?%i-X8zjI>C`#4ktJi~c0wmiY2|%=~;ok`Kvl&VE(re$Wj2eOX z_@3zAy(_kC&ce{4gWb86nAFzP)PY9C$B*aWPxCX;rAr*%fB#cfIn2)9h@_;xFqwQg zTWxJU9)Ds3jvYOLii;QFbkMS^taBWYhm@4iA(HOfw{Ji%ro}(Z`~Rn z6<9PaBNCI+@YrK3F=g^3w+Rr`)ivPjZw}y8ej#|?z%;`WZh+fgwW%qEDY*vPV!d{w41e^79H%R#pzd=>*5~i0j&gjUPH>5c>A* zCDW*#JO7TSo_+>`t62tOAnn%&kl*s<8YJzJ`w#W(G+;Kz;+@^QkUr`f@37{U7HrzI z9lsS9VMtnEbhSpa_6-%fso92e7pidf{AFA>>N+f2x`3I}zAyKKE;cd2ivEcS=wgjx zfYN)Y_T?7-hMGn@wr}5rUcC~$&!Vx>{68&3e%?{mW>+I^rTl7vqP+2=zG7x#y?gf# z>cu?vO$dkd^c%5r=T_#bsYy`JL;pSRjs-9^HK0c~t5`xc@aWOIJNgeyMr>>}Oa>lb z{qQr&E9(&x8-tdHI?TE?9nsMdEP*X9Dn)te1vqVX&{&#g`nl&WV*9IGS%)Mn%*;F@ zeb&Z}+puFtHVAR(I$0jN21z(b6Cl;2c1A2(v=om%`Vgz>)YQ~s#fr7a%36b`=PksI zm8;gErMbG@0EMhU!3*{DFsB6%uULiU z%NH^-rJiZg;?-iQ{f9%yY;HoBLR;-1xJZDHjb^w8r64t>H@lbSU%&obfQ+U_T)_e1 zl5>cjDGmq(HMh;gsk6Uf*BjZ4kLZ^X7=LI1Cn5F8SK4=v$X{>VdEvgCg6y3d_2!>pNeQC?oizEg$;0XeAC0P^dB z)5n^yV#O*v{P1E~-R97t!}xg5UNrrZkC=)IM6|Xdkr1TP@`PL3W)OTO024Vd5I+=v z(Hzi6;ytNJo+dz}#f+x7E^wx$B7O3Wm_IMm+uNt$6&9XBX6D_vSW(Qt=~RG}eKDm5 zskuwfceEG3WXTFV^2jn-a7ce|Zf;?LVPiuhP98gnom*eV)XS9^#SkK>C%~HoxQo_U z0PJ)D89YIRW}Fq?AbG@7xMxn03$|@!7HzBM{kMiRdbRwr&>GbK4kHPd8Il4TU@{cJYWSu zwhNfT5nN4M2LSd9K>eKC@we=a0X2fAB(xCs_ST_qN1qJ^1tX&sPDc##5~(to`B}*K7a_U00U?Y2TXK#Ouumfb$8Cj z^Utl2p5i@Llq5|xC=ftur37Ckk){*WaU0Q;P#4$GN;^*HFOm zX^w0Zk;-K#>BZ*Tj?+6RC&uyz1aFKe>PuSQ89{ znj!}y;ZO|$Hn_mS&fZkgTD0{0K)^8B{7X7aj1Fs%8bJOUrT%m;NQ(2yOxwI#C6+#X z=cB!}F9M@=cG1sEX&|6!XW|c?0+70iX$us{B-OM?rfrf1DeF0*nokgH+6j=m+(D!M z9tjCq?LEAp6)Q=rB=G!Lb*QJ`Ja(los$98^Pe zSe>k^!AM$uQ@}v6M~@zl@jU+sq25`x^+AsBDw>FD?~$r6&Xcl)@=mgUy*wyzz5#;E z<=RqRUA;;FF<`fe(UxepZr$b@jmE7U$EhA73|2_fGABLe7s4V#AL>(*MyJ!cs-~u9 z4}g|XU#JT+o6Y^KR_j{^gW)<=ZqTvO0b?jd=~mxLb=Zx*iRj^}BaMxXf41B0rGa0` z^q-JQLEkWmF&d3&R;xAJz#9gF1I-d;uZ3&M(yqnpTv-Q((bvMMwg`eyP+woa-05-_ zfp84~t@8W#w=_72<{*R?8|aCp7?a7=$6~RJGa8NkrGHpJUCz$i;m~l<_gq4VT@Zv4 zo6Yuv!{I0c&_Ej{x?T%cR?-N~2f%9WRCDNub^{e}p@g=K-(_?_Y}`Nk#?Yf6G(@MI zLqGIoGx2zc$~^uWq~h}FJM``k1&5B%@_xG4uW!F~Pp5YvJ73`jgyzWf)4o4Vp;&+i zlnw)jdAXfD-G2bl7^MIOGZ#$&0000< KMNUMnLSTZ?UE>u1 diff --git a/src/ja/rawkuma/res/mipmap-mdpi/ic_launcher.png b/src/ja/rawkuma/res/mipmap-mdpi/ic_launcher.png index a7513e106105c5d25a3f3a914337840824a0c9d0..20111d0cf48bdedce8af96458da20967989ac37f 100644 GIT binary patch delta 2363 zcmV-B3B>m87R3^fBYz1DNklh?{(kh{LXjIx%c)9(Qo_;{l@L5-+uvqZ3T~|06%m8J8oOg z!wBytHi{*iNAXvE_KXk+P*O1}Bm2ye5C3!|G&V{}MHZnyx?AEu&q$U%ES|{W#UIyq z=e~TRzN3TeYK*7aMR7lgQbVEU)D(LD=#Dr3zPo10L6biSAo;`zOP^?I4^2_Xma>jb z^BBtC4a1~4PJcTE?(XaBBh2!TrSIpY(Y*avjh{lJ>8Kkb2p}tR)3W-*Q7TXkdA?r7 zSyU3va{4-Yx)o7gReBrVXEvUYfWPMz z-mq++vNYT^jh>x6l&VhYo>=tSt=ZHhqaT~qaq+9!)PG3V&wZcvw*Dy9!D!3Jvr`W! z|L}t#fC2zCEAm&So=?M0jc6l|v=O!Z2d7ZRXNV$~dX%WRZxwyKjs2MbK*4oFfgxqZ^qKF0`t_WahD$h;t z#|Rgn3TW55ndtjXqC*#i>ab4`*g9_pPg_kNZGYX97(f^RY?23{elgLO`$bxo-bhq7 z%ZS=i%_ldJ)*8BJ54$PkX?{}-8@GDCxj$`JxSj?DcWa>ufD`Z zq$6KfkPk0GZP_TE3|>c+`v)HYFMC$JNu2KrAsc|@_zntujYQ)M00aQO_)+8DgH*Q% z)qlwyIj-`+9|xXPM5)PUNyUTOXEAQI@IF_h;a_+vl2U+o1J?2h@l~O`YnRvx3@z`b zlb96<0N{3K-L-pJwsL@8vvfN6}Zb$fWP*c^fK-FUVkn)zO95s{Y&!b_1PCuVNMrqoN0W?7@|`j zM*_10yh*%aYm=>Y+zRB5)e2~UMTP=@bByUT5dbYeip?HRTze)~V| zg5WfEjQ6k5tiW*q6hnav#YFXs$btg)6t)6hfTos1e&b7E{7e|1D?QI(wew*71AkhH z9#>1x2X8MbrmeEesJ$~-5oZqMjD1e#K!n!Jz~aTlv;H|Fgfu|!i7yES+@3d$XOp*^ z#&g&_hOmjfH_`y;zaq}9gad#aSTj>A;8csgcO%)n08KIn*v|4m}!+)-DoWX@PBIb9p}JoVSoY9ixrRn%J?wC#xZSs0>*1Zd)grk zutluIafgr(fCsHp0KAZ~0=GL;^}0obP_XCCuo+Djs!b@!^Dg7n$8)h4Qd^0R0W1n- zhp50BBNV8_Is24JJ?%K=~o?(rya;9xtYrzBBEy4usDja@2T)rQAl%5W9Y0H~Rq5f?N_>7e79nAzl?|tyHQ||%~G+Eay zZnls?mHoTX>mCIdKq+vC℘ac$mgVMiQMqm#C?R=(CCF-Y)vtN(4X{qdEXwYL}0X zZ!eU2wN$_Zuz+YQ0Jt>R3ituYy**$ecL8FPsf31bAA&js&}EbW zsA7O>1AueDRsd%LT+U>y%x2tccu^Z&hJ~;9q!W=q9ax0+#D$9%L zt^5C^75GwxkO>e&3O9uNu;6*2Znz;S4b|f#qRdkJ!8uc3b6#x44UjrgC{Pm4q;H=Y zEoM0IDOnpXMSqCHTLWJrD#Ug`UB`O)!-m(*C)$R+|6zVFtKW|MbW7<<)c+AojDrsA zfxg|xJx}7Sk$?gUfCqVX+Hkt$Y~c+$)PQkdZD!9HE|<51vXx&3AN+=>eQ$8zq;#Te zytQzx%K!dgJB@nu9X%+Hl$d=Va{JhOp_Gvepn#|?d4E}HG=K6Cx_nSi?BP3pEq-jW z_@1)oUxx8FKfRt>evs=#dTTI+fxF4h7)}X~#zl$nm7F zpmrvPI|8|VeRCUr7x>B3EEGM`V!b=DH?`1y5l`X@a%pz*h<`jq*^!&fiDDU}UZ<$` z@faPS7Jsf*t-F@e+tY8uofdcBAb>PVFY1{*c+wooD!$wbCF|dnj9J-m-_IA0ZxS}q z>v82~EBXVq?OsWrF07{3##-E#`|;QcFjPhuO9|2~8=q5SD23b1=KJ9=rsXJ*-q|~5 zWOwkk6<$99p|gWuK6zXeD=YavZ{qok$WH!cvNYEO8USNA+DXL_Tz`G~{yK(r?D@D` h{0hi&f8n`i(4002ovPDHLkV1hAWc=G@N delta 2919 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 umC* literal 7036 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 af&T*lAyHJ^4iVS@0000(b@#5XV;C&9xhmfYT`) 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

Kann{zpZ+`w3obKurplDO zm&+f@R3T&_qoDDJI;mrmunQp;vu8bt!GrI>%vtlWZrvu_d3#rMxwZvkKXheY&c@O& zHsQoS$xOJOKK*greDjT{RxP3AO%EJEPQjKybM)wOEPVAHY~H*BR;!4+`*lax>smS# z4InEw59>DljNkq`jgOZuLhIHoFm>uIY}oKUES4-600k2yzSg_USXk4hO;7WDRoV>- zgtckoT1Z7ss8SbSez}wlKVswr#7BqVq2afe@EQWo+V6hGfj^F;d9x;%HtkV#?|uU) z7Pz#pqM{Q$Nr5}HWIdfit z-ImVeAYZJ@7uzz#@^nPqG6j%7n_+}X>9tWmlO!wZH)w$s%il$Qem+LtHvu#xI%XD6dclZO6G)$cw;jfkbavhZyrolQdj-q)jB=hg@h z3&q8ZEWGyqYIMEvdc61Ut61~ZH<&hUF7op(=nB&AFQHFy&5z{Gl$4aRai$UlGP}b5 zf=5e&?UDttF*UGe%`&EX6M(|4z$2sk<5Ff8mVdd0$vu7g^uX*{(@>*EHM7&?wAb;R z>hvHP=-|P_7&~?fl9N*~;MVKWqg#6&+m z{iQOFEkZkgQ3kHL^uKpeev{xFBR1c8Mj1pmXPI z@#Y&ZF$3b%sdLb@X(PP-)&ll#SzlU0L?(oH-uVcxzVrKd85zX7 z$i3l=@74p7KU$eD?Mof6)B)t6M+`uYpnB%Y&{80EGCWN{-Bcs(-L*C?fD~h5B*Ma@ z(W+%LB%M2tyu1R;o;4MB-PQk!Xj^6hN^X_$6Q0CRKkY%A)-7=4=y7CaT?XV_SS)t- zf~dgJ0!aPb9{?GlSg9!~^~vkw$jsnGB)W2^pim$l_0U^rGkvtcaTTWNFTyfq8VSs@ zyl~-ML`0B(tTZoULbTote*5iDj2itIQc}{`*Rq@k3-gD$ZiN{N6ezGtodP))!h?l1 zY0|{B7Uqkj@_?pYC}NTHKZzWoaulMXqVVI6^{84^x5h)s&_o3YU{vx%|1t*-np06x zaf$KL2y8$3WF?-R@e+!Q^B@Z3!T0I~QJ?&AbRfeZnNSTr{U>J6Q7z!SerL`k;l5Fi;K-5V5QR(++mAbdjIbf?JR{!czohBOh%eL`$?uk2XdvRreVOq`TO6*2R@`x=)s0J%O2n=Cg{#My@jG_5>D z_8>`)#a(yy!wWAwgUCoqSMz=?Ui=|me&sC|<}u{1ei%1yG-}tb>4Tm5hS!lJe`ENF z3Cu{?v12<-pZ)}M){;k_cO5!(1S9Wz1Q*W#13}1lp+ZI}kWcnS?8gfSDwhCq*O+(< zXygs^)<&g1vP^M1@tFJEQ!Idscm4Y7pSWwt7!()T7^v&kt&LX~KF3S}{#@j)7&vGY ze*N_iMm-`UBXMK5&RDv15!arRbvYX&?i-K2d-o}F5Q!X)%P4@1ur?!sY2|_f@hFG4 z4N{W$_@bDnCPo2e;iy%s9^0_y&6{vBke8Q_6)XOO^z=(iXsuK!7XAD6L9JSe9(}1` zRzX1_3(FvPNoZ(@E-3!{-#z&L`|UV?AsI~?H^2=ybV9doUAS|h2G75+5O2Tz5u-p9 z;;IKAqb%LX3+ZjFG6j&o!0|wC_U`)?GiT06T51|1BEn!1DNdTeC4xXlVXZ~QHuf`c;BA;V zaV%;k*5Jxro)dEw@LRX(hKuRR4gjg4w&oKID?DIr#0+ zNgVj|7>jG}-@gw7Qswwce%+rs4IDHQyLat|#X@xr0tb*$%A|!cp8|P*JihSZ?CUoL zGQ{Q#RL^h$5KHBW#GE-#;r=nh{n$Vmn>PJ`=bm4Pq@?rc(X}l)w{MP`HL7^3;u>wH zu&5YEj-SCdTlXS4^%6RCXool7c#&yy{#@ipefQlD8GxL@{=uy%%M%yM1%ULlFf)EJ zGkjms!YG9%6024&L69k=)FgdR7vW3oH}BsaGJHoL<&<*-3e zB%{SDA|^7Dg{of8&c(8o-{a_sB(!YR9G|Ut4+#mz%zJ9B+o%LRbcN&6(B9DR#NskE9H1CSJjZQItMabt6ycM9^FJY^W0e9Rumd)MW=Sn(7p3D2nn?!BQpyt*YCigzmqUw z{1`m(#5lv&Xm!2bc;h|HoBtXE5M^+9UakVHIRJStRioXn)YR1AL?rsO_fZO`l7&YV zTA4Rqm4SF0&m#{;`>XaJ8joBUM1j8f`rl~Vwl(h-CEruL^1_90Uco|5a+=?WS~Zk8l86J2OC;5JvL{kqo!)T`p|ZX zQi!AQ>ML_G)PNCDy$_`TjT<)w$BrJuGmqbcs7Qy^SO&h^u@CFM+XcH_Yr=Ik=QgNY z1LN#F*%6NaRxyUowsn zidD7%GPPVvW1|$uoh|AK(Gw;-i0My1u0IPMm)OBWN6@$LFkIKJDMk(H?d&H5X%{oG zeDxL_J)vZhI%Zq)TWE+CJ-W3+-=3Wr)l#pl>|DJ2={Jb0oPc#}movMO(d+*ECt|~f zZy}20&TwjB+Wx%tGD?}W%c1R4Appc%1aAwj?dJ+0s(=xNe*JF4J8!>ibieTP&wDXs z=!2Lvb}*VXqUyG;SV_;w!mj;?uwm;y2hf#GC4=MWA-!=;%LYun*Ir~BTDfjJP9~*c z^Y^P!xw7$u#rD_UjPvKuK-Bod%!G3o1&_x9ks{*wPzxXdD3-M~5;-dykQ&cen9ij> zlu<2A?``u|6HskS04yzMqA~ z#n`dy4}8CUKXUR4P&+XJ_YdoX#OnH578OodxqdtTIPwp+|F8~;iPeov1t(6NLf3A0 zu%I$gDA0{Yq=AgEAu|-qeav!4f&8U5x{IZuyRH<702G1h)oSCz4_`z3_H7Jp+AqKS zj(+_|VC;z7acyhw{xeeJm#z99e;z)C;e&6+b#0q_b=egZ6k)}ht;ou=V3$bEkpfCS_~X2r&@T#-$83KUe}_@Hbm(Cl^# zES5Mt_0(e+KYk2v&)D}TPo74RstrB>gP4&Avdo8Z+^4}XV0f$P@k^o)xCq) z@l(??F@Nz&v~1lRYrk5~*d6amN;=0VA*J&O$S%o9WdxB^nbsFoQtxYqYLyv)8a8aG z%fgI=|CnWS?y``o(o;N8{rdIs$+EW$snC?kI&1aLDZ#jgPIsUv=tP`bXBZ5fdr z%}^K~RVoz#=}-|5JCHvB@`ugoX=3VUB>R#SUiSS`vCp}c;2GL9al_eU!$6#(hHMTP+ssKL;e4B!Ng z)4*q!$R-nsN|h>M&g>^KaNzAOaXH@dEU0ec;`)w%Th(GAD%Ifu$t>kD zvKQt66vVtReF|jEa>^s~yoGWCiM;ac{5zKNoLHk8#!nc-Hr9LUj_ck3{PQm?czH3l zZQF^2DwQ#B{!Cogu|2CJL>I{{6t=o+*M2N``7KD29aE+}f_v{7gv7)eyhmZ*Cnu+3 z-uySPcI~&w&!<9C5=23*kH~kT@&sodW%u>HIRLpnE?-@6ws)gILUhB14P1n1-a{B! zY2FxG)(5-X8M zLGe^*vu)c}OfaX<&Yn$T1v@F?@U6x3annuRnDEWJDCUT4Pt%@yj@4Eq8&S8eow4b= zZMb;xlB4`ES)ujM=g?zadiV5)b*bZ&5r7cgpn)rZc#G-27)I1py#-Y2Fo#2yLs(q% zn9=uQ?AZHQbRfw#FTVIX4j-nVuQ<$~KNIcRwr0XD70>i_<>uz$yYIJw9Gn>$msw0S z>G?EIs(IM5MN`b2IRy2sHWm1{UWY0`KWj7AXwGiS}m zfdjvzsHgxIkpjx}lk!j)M;K&S(c#**7(aeAqXt^{ z0?8Vy*L;Ib8@FQL{@>89T^n@j)E>>6HfEHGm;OUB&cFQf2QDP1Fbg%Y!q%;uGvM$p zl9je>`4NZyI?4)65diz$(VJ;$6l||eyC$LhgAYDsAfxzevPO%nVymlA%>zLo)TcrM zh_@i#NHoPkll7SnjqZ3|dn}kg3ym8$(A8ilhB+f61KYO!h%Z*I#qYoW#oE=ZS%dZI zcgL-$6d#L*4eOy!?OI&TO>a&lg#Y!|QCz;9jgu!&Vg1+NAvrk>X=xW33+&pp6D#Q1 zx>a+pm0+nvFoB)ov9q$WSfNdljkF;07a;EayxHf<9R<>p{EgT)yipxRfK+M%2|_4Z zw`qpOi{_(IqXs;Jz`iH90cDZC``$AAxMLTxSfTJDR<)G^$;f*i9TkcG18zl^&K*&y zQXB&tsr$6SBtyl<#4-!>(WA$(Zv965_S+$5H=-isM4>Dek>%$nB*bIf*ikHX+K5ev z=0_}V^Oo&+?6K+0RA9B_LzZ2Qi)Q2=voC151CUwveqwud>(*ig z$rEc-XP_bAQK{e>iPaGi9?k@AijC%};@+Nj?b;2PF>^jELSf30mv-+eZ5)gSS0h1(A=(FE4=agi$N`zskJN7?^#*dOxq#~WtZ%rDj>9hM5zcw zv9YmC-lEUcjrA8W?$1sXZ`rcX@xqI*BQGxpqCg;`qZB-KNZva8{@xWHe;nD_nXrg-q`R|zB9D^upQ)5s80W@*0mwrmGq8Rt zu!waXlKyP7UVGr~5=j zhCviWrqSi*6(TDq7rA-)_~Y;?T*}BnLe&J^d(U8u8#l@)MWuDvvh_zi^2jt?x8Z>BtFFt=CwQJY%IXPk_!$&-f^XF3#7ZZu@*I%RLZK-t>DXT&d7>lV{tukU` zBH8!Kp0fj0ncVWv*%WNrz8}XqAMb}QPanto}5gx9v zAT=I8zpxNFxdkjWC?hkQfkst^h;`E67g8=_-*0~-J2#I7z`gX+3@*#0GBZPmJ^;y1 zp&zbp4u4-#_r)x80CAybuz?C7I!r~DBk|DK`!Hv=XXOnt@X@i6RAG!t%kA0o3mzIf z30Y|uQC}c0869G&GL>sHU$NF1&A||MjWEqrx7~wdHmFUMg8Ayh}>J2Sh_7=j!!mw)9I_9I(%jO`z zUXPxGk(6|*M5SlI)znlpxV&DQ83vG-C_|(7_ez0`4xrc0-R?tes0w{ZNDNkgxeOgT zwDssl=KjYfKFyq|SWTd3zbXI7gMzzYQUbRw*FizuAIP1!UBVzy zMqL4*tT1x-iZWmolygGW8J&`4%(aWGl0FrNAU1VtpP~5T^AB~OmF7a3v}@L^gT^C&x9$Dw&xVC?{S9_DTYBLPOE_ zmQLu_8(`_w0n0vKjAx&H z5r+;P#i~^w>DFqbkx!gBjb6R)M0R#ED+wIzt5g8wh26PS=TL=c9&7UYz?z$ssPD}B z9D#&{YS_GaHL6#0KdwnJBps#_yTiw`Be=<-NkyU_mu=|GN?h=kSkpjOWTZ1P@Sa`3 zg%B${BsV&Ws@aQ-tx*=N-DXE-b{^B(hC)IQ3qVOeP7-dUu)EUcI|*139?2Z9r%#{7 zfc|~h5e?oB|D|UeeCKGKJaL$%0I6#gEFYX-0CMbIKrF0o-MW5iVV)c8wEvI{L`N6I z;M)yfcy*kTm6?tUSiXE!$%4Kv+EG(bNRUe*0meR<jVL{8~}0N*GX|oe$$~+^wCNQ*d_t}L>Wy58R0UJ4&ay!d?Sf?K$LK^ zi_OP4BfxO!Y z%LRZ`xrR{=Dh(k;p-Ppi_-@lGuX2I9C})$-;iVT}$2S|ckj0O&6%uR*h(H_($AZjM zdM#D*=By?FeId#CTNW_GBEzBq8JPs`u?ZL^${1X7ZZ97^g{0BRz!}K+N)nJHE240f zgvxmFg=bi(t9!K%_YJ3DI5H^i+qZ|sP6s=TgbyI^5G-{78P>uarTG;AMWSB42KZsy zTCSmu9*wjz3a0;P$qF1hb_$oXvQU^`fGEk1s>L=`mL;?mWweHXco*vA%IHWuooAPk z%>V?HxLO6kCKG^wAtEr80OSRQMUZhp7O+MG1&qKAQDQc0l zE?yEOJs%y;LIoj`&eDmD&ZD8qR0eWjs?-6bV%L}!rdWi@15XF2Y}ve;3CJZE#}P|$ z(B$Z(j0X}t$+>#s0uBKvjocWbj9WEF%rB6D{Suh5@E#8tOPSvR33yc!5LdMdX3m&` zTW{^bG%Ih%Bp7|FNt0&alTW{ZC{Ps-r$aUP6iA?$mn&D^rB0nX=Cv>{RK)2-B_9%1 z%ZSAA;X^Qg-c0`S0R}=u=$s5XqigTZUASKaZq~9P$6H2r-ls{Gmx)!$3acX4DgZCo z1^i|QZV@EhZ*dq6OJpmhvd6P_;9OKRUU_8>1`q0Mh&}N@bmnXldiNfJ)RgljW$-Gr z45U3XRRs`l5qO0--Q5|=vEI>0s8SV+7td$GU%`0WcJKZLg9i>re_~}8!0N_^C~RxG z9)Rdz6uW@mC7`1q<53IX9@=J;WlWU>2(@eBtFJyqy}EAY^SF!T*?>$HbLPCvvPon* zS5@>Z1LJ#G4*zj96mnBTLi?G(K!%7d=s8P+p zQ+sbh?05b8O_(xuHZn3O1)74&Tr)I+@lw$Y%1jG03m`p>Oi##G!9?mj<$?9PqZbw~ ze9my5mEN{c%+TDq3-HA!tMHIT#=mp~X*#`>DA0LH#!!ocg*i~70;q)mOtr{}Eiq0i z3K#%zUq_8bT3#8;kDVbLLuA7?A@IYEqXw<9SZeqDbEkid zh9*d4(~k_CmSwDy1e|q51;}zSWSN3VsN5ZCSc;ZKoXQ);2{!c!K7hQF3lBA(0mzuC zLD>dPp#W`6i=K?+&d$_ndD@I5KnRB*M53`QV7x_!dgwMyjZIpRS+pP(h7nXBmd?DL z08-c&V_}XkjCqp4EYWv~GKOiCDWl_3a7f{dF)8SMmtu{jk$sj`fbf{eZzN<&dN_uGJnMCzkx zMQN1$Cj&<$fJ}W9wxJZNqZv^4YZ0q~s7OWh;{+tJsgnB8ZaeD^mSBL#*Lxl~fQ->a z4;EIdR;{3FVeSv+K&;RPm0h}8xakqBfDpo}oUvjf5K#p(IzUDZQNTJD z&<0GlNND3o-(i9)fO~BMhKLd~1NTf|@gPLfw3KVrvv6r461k zWnn6S{NQ4Sx|GNkl!7DcS26WQp`0?4A_Qw?D5Z~5yn(bjvUU@g6nO@qBiFT9^?`YuS_5fXM@33Cq)LZV8ZtPzXW@K-9^R{izzR zN$n;WQT;;Fob*&}U-$L}j4pK?#9B;rfMbACr`u7vrO_~3X} zVeN~;dyasCV@!VaIgL`FK)Uw}hyn!@G%9fPW@+R;zJznVv3J_1rxQ|Jtb9ES(y$_3R2LV<#%kp;r$RPd_<-?5TfL|WX0KCmND{%WWp0Ve-LVU^CWLT@x1CZ+^0s@dqDT28%fsAFgui5q{ z_OHyFmIZ()^d=@TG4X^TFo%*$$q{$fz*`|B5{}t1wf8jJHxRbSdseUNiCc=1U*q`K z$)1{;N(YaSv7LOuS40LP07WMzChi1K*S~r5duf3c2nF!BufP5HPgbs4oJmbhz0n~= zUoikt%vN-*nl%?mvOKUfmm|o| z&Jayh-8}p|DG?162@@iN1^q=OBqa2;TCIx(=FT>E1xpJHgjMPFHTM)1zIBn!W_$F~ zrAyxepsXf}MJZhXF$cAPa7tc}jEt-k9Uc9e#bW8^?@|WyP4{;!fBX6S%;lw@BuPKz z<>gJz%ga0KumKT(i2699-}o~%OMx5_SxShpK*det;(CULhAyyLt(rP4`ZsnO_ku%y z)w=`&fI#~4msf2O+~+kjs<%7a?e>hKqN1m=v$MBq1Zav_AqvDlLfSD2GXSD46e>eM zl%U1f7|B9$adG`aLqngoSS;~cpA*mjWPAhk1Mo~j@sDx_q~C~@kMR;#sY zSXfy5u&}URq9|SifDX#?ufl+1R)KH25i66KCGc!p`gh>Z&)XbiB^EeYmgPT+ii$QD z78d?$v)R%d;32i0#2&(-#Ut$+#y zcK{J!h~lWgQPp)(Ab+S`V9QtGdYhmv#+vE@NTosq z8kOp3g=SOKC(un*!KW3hRjQ-{i~iNNt8m*|!6&Q+f~z25hZm`b7`fSdOoN9HAU@Ky z;Lr-#>hBeVeeoZ(0s~0}krqtupZWcG{<1Ll8*0bVf+rAJ%kPJ}+OcE>v{Xd}4SlJ6 zUQ*x2{}p5T1b)#j{d?*GGFTw>|0yd(&mixF>oc=0cHF^Zy92rN)y=IC;3~h9yb7T5 zyEheLW>*1JA-1XfPO@ABC=lMvU-Hr&oqzxG*}`L0*azO%s(b=SJKwAOTt1QJm{s`% zP`O^R;7-ox`%wX2o~r=Tyh%YcX9O2z<#@EK04m3uQxT^2e^70pR7yOBW&i*H07*qo IM6N<$g2=44%m4rY diff --git a/src/ja/rawkuma/res/mipmap-xxxhdpi/ic_launcher.png b/src/ja/rawkuma/res/mipmap-xxxhdpi/ic_launcher.png index 3f9ace4dacbcbe6596265fb7059bff53fd6f0190..55192a63d9dcfed83453e5252866e493f5ebf986 100644 GIT binary patch literal 9612 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 F{|{KeuxkJS literal 18379 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 mEM_1d0GGuw=MOT_4E!H7v*~jW`iznQ00005ln diff --git a/src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/Dto.kt b/src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/Dto.kt new file mode 100644 index 000000000..9529e672c --- /dev/null +++ b/src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/Dto.kt @@ -0,0 +1,77 @@ +package eu.kanade.tachiyomi.extension.ja.rawkuma + +import eu.kanade.tachiyomi.source.model.SManga +import keiyoushi.utils.toJsonString +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import org.jsoup.Jsoup +import org.jsoup.parser.Parser + +@Serializable +class Term( + val name: String, + val slug: String, + val taxonomy: String, +) + +@Serializable +class Manga( + val id: Int, + val slug: String, + val title: Rendered, + val content: Rendered, + @SerialName("_embedded") + val embedded: Embedded, +) { + fun toSManga() = SManga.create().apply { + url = MangaUrl(id, slug).toJsonString() + title = Parser.unescapeEntities(this@Manga.title.rendered, false) + description = Jsoup.parseBodyFragment(content.rendered).wholeText() + thumbnail_url = embedded.featuredMedia.firstOrNull()?.sourceUrl + author = embedded.getTerms("series-author").joinToString() + artist = embedded.getTerms("artist").joinToString() + genre = buildSet { + addAll(embedded.getTerms("genre")) + addAll(embedded.getTerms("type")) + }.joinToString() + status = with(embedded.getTerms("status")) { + when { + contains("Ongoing") -> SManga.ONGOING + contains("Completed") -> SManga.COMPLETED + contains("Cancelled") -> SManga.CANCELLED + contains("On Hiatus") -> SManga.ON_HIATUS + else -> SManga.UNKNOWN + } + } + initialized = true + } +} + +@Serializable +class Embedded( + @SerialName("wp:featuredmedia") + val featuredMedia: List, + @SerialName("wp:term") + private val terms: List>, +) { + fun getTerms(type: String): List { + return terms.find { it.getOrNull(0)?.taxonomy == type }?.map { it.name } ?: emptyList() + } +} + +@Serializable +class FeaturedMedia( + @SerialName("source_url") + val sourceUrl: String, +) + +@Serializable +class Rendered( + val rendered: String, +) + +@Serializable +class MangaUrl( + val id: Int, + val slug: String, +) diff --git a/src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/Filter.kt b/src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/Filter.kt new file mode 100644 index 000000000..7205ea8cc --- /dev/null +++ b/src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/Filter.kt @@ -0,0 +1,103 @@ +package eu.kanade.tachiyomi.extension.ja.rawkuma + +import eu.kanade.tachiyomi.source.model.Filter +import eu.kanade.tachiyomi.source.model.FilterList + +abstract class SelectFilter( + name: String, + private val options: List>, +) : Filter.Select( + name, + options.map { it.first }.toTypedArray(), +) { + val selected get() = options[state].second +} + +class CheckBoxFilter(name: String, val value: T) : Filter.CheckBox(name) + +abstract class CheckBoxGroup( + name: String, + options: List>, +) : Filter.Group>( + name, + options.map { CheckBoxFilter(it.first, it.second) }, +) { + val checked get() = state.filter { it.state }.map { it.value } +} + +class TriStateFilter(name: String, val value: T) : Filter.TriState(name) + +abstract class TriStateGroupFilter( + name: String, + options: List>, +) : Filter.Group>( + name, + options.map { TriStateFilter(it.first, it.second) }, +) { + val included get() = state.filter { it.isIncluded() }.map { it.value } + val excluded get() = state.filter { it.isExcluded() }.map { it.value } +} + +class SortFilter( + selection: Int = 0, +) : Filter.Sort( + name = "Sort", + values = sortBy.map { it.first }.toTypedArray(), + state = Selection(selection, false), +) { + val sort get() = sortBy[state?.index ?: 0].second + val isAscending get() = state?.ascending ?: false + + companion object { + private val sortBy = listOf( + "Popular" to "popular", + "Rating" to "rating", + "Updated" to "updated", + "Bookmarked" to "bookmarked", + "Title" to "title", + ) + + val popular = FilterList(SortFilter(0)) + val latest = FilterList(SortFilter(2)) + } +} + +class GenreFilter( + genres: List>, +) : TriStateGroupFilter("Genre", genres) + +class GenreInclusion : SelectFilter( + name = "Genre Inclusion Mode", + options = listOf( + "OR" to "OR", + "AND" to "AND", + ), +) + +class GenreExclusion : SelectFilter( + name = "Genre Exclusion Mode", + options = listOf( + "OR" to "OR", + "AND" to "AND", + ), +) + +class TypeFilter : CheckBoxGroup( + name = "Type", + options = listOf( + "Manga" to "manga", + "Manhwa" to "manhwa", + "Manhua" to "manhua", + ), +) + +class StatusFilter : CheckBoxGroup( + name = "Status", + options = listOf( + "Ongoing" to "ongoing", + "Completed" to "completed", + "Cancelled" to "cancelled", + "On Hiatus" to "on-hiatus", + "Unknown" to "unknown", + ), +) diff --git a/src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/Rawkuma.kt b/src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/Rawkuma.kt index 8b0a6b07c..8286a48b3 100644 --- a/src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/Rawkuma.kt +++ b/src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/Rawkuma.kt @@ -1,12 +1,320 @@ package eu.kanade.tachiyomi.extension.ja.rawkuma -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import okhttp3.OkHttpClient +import android.util.Log +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.network.asObservableSuccess +import eu.kanade.tachiyomi.network.await +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 eu.kanade.tachiyomi.util.asJsoup +import keiyoushi.utils.firstInstance +import keiyoushi.utils.firstInstanceOrNull +import keiyoushi.utils.parseAs +import keiyoushi.utils.toJsonString +import keiyoushi.utils.tryParse +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking +import okhttp3.CacheControl +import okhttp3.Call +import okhttp3.Callback +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.MultipartBody +import okhttp3.Request +import okhttp3.Response +import okhttp3.brotli.BrotliInterceptor +import okhttp3.internal.closeQuietly +import okio.IOException +import org.jsoup.Jsoup +import rx.Observable +import java.lang.UnsupportedOperationException +import java.text.SimpleDateFormat +import java.util.Locale -class Rawkuma : MangaThemesia("Rawkuma", "https://old.rawkuma.net", "ja") { +class Rawkuma : HttpSource() { + override val name = "Rawkuma" + override val lang = "ja" + override val baseUrl = "https://rawkuma.net" + override val supportsLatest = true + override val versionId = 2 - override val client: OkHttpClient = super.client.newBuilder() - .rateLimit(4) + override val client = network.cloudflareClient.newBuilder() + // fix disk cache + .apply { + val index = networkInterceptors().indexOfFirst { it is BrotliInterceptor } + if (index >= 0) interceptors().add(networkInterceptors().removeAt(index)) + } .build() + + override fun headersBuilder() = super.headersBuilder() + .set("Referer", "$baseUrl/") + + override fun popularMangaRequest(page: Int) = + searchMangaRequest(page, "", SortFilter.popular) + + override fun popularMangaParse(response: Response) = + searchMangaParse(response) + + override fun latestUpdatesRequest(page: Int) = + searchMangaRequest(page, "", SortFilter.latest) + + override fun latestUpdatesParse(response: Response) = + searchMangaParse(response) + + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + return if (query.startsWith("https://")) { + deepLink(query) + } else { + super.fetchSearchManga(page, query, filters) + } + } + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = "$baseUrl/wp-admin/admin-ajax.php?action=advanced_search" + val body = MultipartBody.Builder().apply { + setType(MultipartBody.FORM) + addFormDataPart("nonce", getNonce()) + filters.firstInstanceOrNull()?.selected.also { + addFormDataPart("inclusion", it ?: "OR") + } + filters.firstInstanceOrNull()?.selected.also { + addFormDataPart("exclusion", it ?: "OR") + } + addFormDataPart("page", page.toString()) + val genres = filters.firstInstanceOrNull() + genres?.included.orEmpty().also { + addFormDataPart("genre", it.toJsonString()) + } + genres?.excluded.orEmpty().also { + addFormDataPart("genre_exclude", it.toJsonString()) + } + addFormDataPart("author", "[]") + addFormDataPart("artist", "[]") + addFormDataPart("project", "0") + filters.firstInstanceOrNull()?.checked.orEmpty().also { + addFormDataPart("type", it.toJsonString()) + } + val sort = filters.firstInstance() + addFormDataPart("order", if (sort.isAscending) "asc" else "desc") + addFormDataPart("orderby", sort.sort) + addFormDataPart("query", query.trim()) + }.build() + + return POST(url, headers, body) + } + + private var nonce: String? = null + + @Synchronized + private fun getNonce(): String { + if (nonce == null) { + val url = "$baseUrl/wp-admin/admin-ajax.php?type=search_form&action=get_nonce" + val response = client.newCall(GET(url, headers)).execute() + + Jsoup.parseBodyFragment(response.body.string()) + .selectFirst("input[name=search_nonce]") + ?.attr("value") + ?.takeIf { it.isNotBlank() } + ?.also { + nonce = it + } + } + + return nonce ?: throw Exception("Unable to get nonce") + } + + private val metadataClient = client.newBuilder() + .addNetworkInterceptor { chain -> + chain.proceed(chain.request()).newBuilder() + .header("Cache-Control", "max-age=${24 * 60 * 60}") + .removeHeader("Pragma") + .removeHeader("Expires") + .build() + }.build() + + override fun getFilterList() = runBlocking(Dispatchers.IO) { + val filters: MutableList> = mutableListOf( + SortFilter(), + TypeFilter(), + StatusFilter(), + ) + + val url = "$baseUrl/wp-json/wp/v2/genre?per_page=100&page=1&orderby=count&order=desc" + val response = metadataClient.newCall( + GET(url, headers, CacheControl.FORCE_CACHE), + ).await() + + if (!response.isSuccessful) { + metadataClient.newCall( + GET(url, headers, CacheControl.FORCE_NETWORK), + ).enqueue( + object : Callback { + override fun onResponse(call: Call, response: Response) { + response.closeQuietly() + } + + override fun onFailure(call: Call, e: IOException) { + Log.e(name, "Failed to fetch genre filter", e) + } + }, + ) + + filters.addAll( + listOf( + Filter.Separator(), + Filter.Header("Press 'reset' to load genre filter"), + ), + ) + + return@runBlocking FilterList(filters) + } + + val data = try { + response.parseAs>() + } catch (e: Throwable) { + Log.e(name, "Failed to parse genre filters", e) + + filters.addAll( + listOf( + Filter.Separator(), + Filter.Header("Failed to parse genre filter"), + ), + ) + + return@runBlocking FilterList(filters) + } + + filters.addAll( + listOf( + GenreFilter( + data.map { it.name to it.slug }, + ), + GenreInclusion(), + GenreInclusion(), + ), + ) + + FilterList(filters) + } + + override fun searchMangaParse(response: Response): MangasPage { + val document = Jsoup.parseBodyFragment(response.body.string(), baseUrl) + val slugs = document.select("div > a[href*=/manga/]:has(> img)").map { + it.absUrl("href").toHttpUrl().pathSegments[1] + }.ifEmpty { + return MangasPage(emptyList(), false) + } + + val url = "$baseUrl/wp-json/wp/v2/manga".toHttpUrl().newBuilder().apply { + slugs.forEach { slug -> + addQueryParameter("slug[]", slug) + } + addQueryParameter("per_page", "${slugs.size + 1}") + addQueryParameter("_embed", null) + }.build() + + val details = client.newCall(GET(url, headers)).execute() + .parseAs>() + .filterNot { manga -> + manga.embedded.getTerms("type").contains("Novel") + } + .associateBy { it.slug } + + val mangas = slugs.mapNotNull { slug -> + details[slug]?.toSManga() + } + + val hasNextPage = document.selectFirst("button > svg") != null + + return MangasPage(mangas, hasNextPage) + } + + private fun deepLink(url: String): Observable { + val httpUrl = url.toHttpUrl() + if ( + httpUrl.host == baseUrl.toHttpUrl().host && + httpUrl.pathSegments.size >= 2 && + httpUrl.pathSegments[0] == "manga" + ) { + val slug = httpUrl.pathSegments[1] + val url = "$baseUrl/wp-json/wp/v2/manga".toHttpUrl().newBuilder() + .addQueryParameter("slug[]", slug) + .addQueryParameter("_embed", null) + .build() + + return client.newCall(GET(url, headers)) + .asObservableSuccess() + .map { response -> + val manga = response.parseAs>()[0] + + if (manga.embedded.getTerms("type").contains("Novel")) { + throw Exception("Novels are not supported") + } + + MangasPage(listOf(manga.toSManga()), false) + } + } + + return Observable.error(Exception("Unsupported url")) + } + + override fun mangaDetailsRequest(manga: SManga): Request { + val id = manga.url.parseAs().id + + return GET("$baseUrl/wp-json/wp/v2/manga/$id?_embed", headers) + } + + override fun getMangaUrl(manga: SManga): String { + val slug = manga.url.parseAs().slug + + return "$baseUrl/manga/$slug/" + } + + override fun mangaDetailsParse(response: Response): SManga { + return response.parseAs().toSManga() + } + + override fun chapterListRequest(manga: SManga): Request { + val id = manga.url.parseAs().id + val url = "$baseUrl/wp-admin/admin-ajax.php".toHttpUrl().newBuilder() + .addQueryParameter("manga_id", id.toString()) + .addQueryParameter("page", "1") + .addQueryParameter("action", "chapter_list") + .build() + + return GET(url, headers) + } + + override fun chapterListParse(response: Response): List { + val document = Jsoup.parseBodyFragment(response.body.string(), baseUrl) + + return document.select("#chapter-list a").map { + SChapter.create().apply { + setUrlWithoutDomain(it.absUrl("href")) + name = it.selectFirst("div > span")!!.ownText() + date_upload = dateFormat.tryParse( + it.selectFirst("time")?.attr("datetime"), + ) + } + } + } + + private val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ENGLISH) + + override fun pageListParse(response: Response): List { + val document = response.asJsoup() + + return document.select("main section img").mapIndexed { idx, img -> + Page(idx, imageUrl = img.absUrl("src")) + } + } + + override fun imageUrlParse(response: Response): String { + throw UnsupportedOperationException() + } } diff --git a/src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/UrlActivity.kt b/src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/UrlActivity.kt new file mode 100644 index 000000000..04b58dba5 --- /dev/null +++ b/src/ja/rawkuma/src/eu/kanade/tachiyomi/extension/ja/rawkuma/UrlActivity.kt @@ -0,0 +1,29 @@ +package eu.kanade.tachiyomi.extension.ja.rawkuma + +import android.app.Activity +import android.content.ActivityNotFoundException +import android.content.Intent +import android.os.Bundle +import android.util.Log +import kotlin.system.exitProcess + +class UrlActivity : Activity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + val mainIntent = Intent().apply { + action = "eu.kanade.tachiyomi.SEARCH" + putExtra("query", intent.data.toString()) + putExtra("filter", packageName) + } + + try { + startActivity(mainIntent) + } catch (e: ActivityNotFoundException) { + Log.e("Rawkuma", "Unable to launch activity", e) + } + + finish() + exitProcess(0) + } +}