From 3a0f6ddddf3a75bae6e783fa75d01f45049f1e9f Mon Sep 17 00:00:00 2001 From: AlphaBoom <30779939+AlphaBoom@users.noreply.github.com> Date: Sat, 31 May 2025 08:18:39 +0800 Subject: [PATCH] Add MyComic (#8986) * Add MyComic * MyComic: Replace Object filter to class filter * Apply suggestions from code review Co-authored-by: Vetle Ledaal * Apply review suggestions. * Try to use selectFirst as much as possible. * Apply review suggestions --------- Co-authored-by: Vetle Ledaal --- src/zh/mycomic/build.gradle | 8 + .../mycomic/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4666 bytes .../mycomic/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2609 bytes .../mycomic/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6497 bytes .../mycomic/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11937 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17648 bytes .../tachiyomi/extension/zh/mycomic/Filters.kt | 144 ++++++++++++ .../tachiyomi/extension/zh/mycomic/MyComic.kt | 206 ++++++++++++++++++ .../extension/zh/mycomic/MyComicDTO.kt | 8 + 9 files changed, 366 insertions(+) create mode 100644 src/zh/mycomic/build.gradle create mode 100644 src/zh/mycomic/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/zh/mycomic/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/zh/mycomic/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/zh/mycomic/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/zh/mycomic/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/zh/mycomic/src/eu/kanade/tachiyomi/extension/zh/mycomic/Filters.kt create mode 100644 src/zh/mycomic/src/eu/kanade/tachiyomi/extension/zh/mycomic/MyComic.kt create mode 100644 src/zh/mycomic/src/eu/kanade/tachiyomi/extension/zh/mycomic/MyComicDTO.kt diff --git a/src/zh/mycomic/build.gradle b/src/zh/mycomic/build.gradle new file mode 100644 index 000000000..d408b3b2a --- /dev/null +++ b/src/zh/mycomic/build.gradle @@ -0,0 +1,8 @@ +ext { + extName = 'MyComic' + extClass = '.MyComic' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/zh/mycomic/res/mipmap-hdpi/ic_launcher.png b/src/zh/mycomic/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..ab404e5e5bcc40f27d51a15c40de55e364db1a27 GIT binary patch literal 4666 zcmV-A62Px`^hrcPRCr$PTn&sI<#~R-nc1D$pS!)kz5nywnX>~q4 ziYAo&HV6!afQwu^5JU}vhBQ(`fFzVOt(vrz(x9|z(^y50aDOO~3>MhN_7geZTj6_ZZ&4S|Y&S$EP&{?*kOT zkgWj7YGW(f+G;}U0O)7K*G48~eMUHN;6Q&g8r>$#)$OXP^#kZoRW;H)8V#Cef7kJc z<8i${9p^L7&o}1m(QcJ7ZZ#6&78r|OU`)Aq^5n@y07|W+wg77vAhv7Qu1H_s@DcG-0yQi@7wNcj6q?Hm3dxR ziN&P16N$u6RJHp3S6*2?54=%rhgD$#V%J=AjgUwrCU`z_bEzcXvA(`OsVE8;G;lXq zPJqnr+iAo8Y!I*nI%7HnLC_M3)lU;atrI6a3Aq0h0O5<{0GFk9$lF#@1kBOpV22 zZzhw;hZh#+emFBTBew#n6+i}acJADHuvnCzE|p3HnoSY?zzH%LR_oD=LG3cqdOqBO zI9*397N1Whr9<=c^FM6GBtL-I)YMcoolbwOQc;h~vb-xSAYlaBe5NtrASMI>*DgTT z^YM7>j3~zLKYhCJZ@{^V7nA$|;`i>oZYR&{Uzg?buiDM3H2}fhs}(qenl&JeG|uwN zH8k51XdC=BN6@?=j4?GHPyC0jb6+@n_Vil-RCkEt1(0D{V`JlATwgCeq^fGv{-Ll; za!;n-MooJnj6q@yF^)qI&!b-u&@J#t@ElZ4M?qDwq$pUZD!8mFD5@G{O@mSgE;uv@ z<1u-juOyR+ubesa`jY^fMB57>Vc))eA5;|WA7r__eIwxbxpwM|!1!QH!fq*sDJhDv zXcV114+@~@$Ic*C*HPAVJimEilPC)|g$9_qYF7SNhrn6_? zIBg3kYrfCPDH>mV-@fY(7mLNix^4!2%@cN-QjpovN_O!)KHAxdk9H(6DMr!3aS$xU zZnirc;Y_n5bF1n)R#g>m$uj;ve;Ge36tS*po?(LB#Rqvz#+cUG+40z!Gp|1eVBM}o zZU*tYckdqO`RHF&DwXTKfC&P_y^11$4<+Kbqpugg6q8`Z2=pAQ0c5_tsehuwk|1djWD zisx}lR|*HaQy3701|8iEJ6)PxO}&OtcY(B9J71FVx68};@yaUJ6uZWT4@wDGp64^7 zDBO1b{P~xOtX9W%fatZjXU~WJKv9&h>bjn6o`*9sZzb5h0*^1G`|y#@PQ*Co^y^y$ z5H&;IZben`*GqYPYjMe7QcVML`TQdO>GBH7x|s$+!*6a*Me=o7s?xTU8HNt%=oI0VRaTM#f7 ziQog0h`sR`t`J4UY{Kpsi>@P6t>TI7JWi|?KprqC7BzhefuCufN$(d;jV$S;iZ~5UNebH)hfQ5%j0K-0`iJ#u!u~>t4#un*pwC` zh6lWU*8oZ+g2azO5WI9txzCxiSniQbnuhEMnP;`e*HVWkx901-o8 zT3I!Obf#MMWlYe%i`v{SM)APl0Dd_U2Z83kD5$)5dIoQmX-UH8n?eD!ef!R%k%%`y zer%#JZXzn;&qjxh!Mk;bKKI}2>o_)>#k@ihu)jC4PuA}_rt7$&BZ(tJgGdYY?29Sj zj2Wi(yUi?vS52E(yxHdS_oFlUtyk07Y9&8X$ zB;t1s^x?Li9y8K*1)k^2W!ybIV{B2pw9N~&&AIVB`L}^c1W%3(V}~R<+#)?+ z)^)s?%Nv?N`rtL#R%X!Z9)b%JwkTgWp$zqn)w zcEuxIvIzz?17y;-Y3>HCMaJQY(Gh$&8LzLBwa212evn_rYh`vp zTGi0y1~_2>arYYc{kW;St0|%-VLUoJhkspNYYC8Z75z7uUMA{3^9ll> z75Je|%nneiAdwoRo%@4B{rJt!&L$8_nua^4XYkrO<-s>6(9IJ!kCYqlH_ShbxAL1; zNCs^`%JYrQs#|#NjZ-?~=*S=rbad1QYYnxaYPkKKX`GXt@y}L(wV5MqZzh_v+%!OL zKMA3$D=qEpesLj$-m)!AfXlv2HOdKRx1%_!P_ z1%c7rm;11webWkK5g{2gX>3-*G)M{gLj!5tLT=s#f~@H{nwc|p(>8kfra}FfwH3_q zVp-Fwg%#=X@yVlMGm5l(|5RTuZtv@9+R0O(_*`xY->3(Qt;N`T65eN9USNie#=U^C z-V4njH$Z-DqIAQ@yHhySpEizW>>E{@+E3TkaR2nIQE<@8#Dc(S+z*a-+--%igth=0 z8zU3*KGpEj5=wnOJTioCzLEO0#QH+HjL%%WWK?MQn~>Kzn^#Kqy#Mua)#(-SB2b-SN7PxV1P&X^a(No5c=BE~u4V+3sx! zpdgBh9ET@IM{s>I-jr^ozW*kl$K#p#rplxsa9mi|ux~cieTlfCgHet(j*)6xn^y`2 zys(r9IgBt@NPxy$inOyMQ+RLf>B1KW2OL6e0q}OYj4#b(a8_%2sMG#bG-$Hy=pZ4|)~a0C@)6Ca(MH_qz)>-wENZ3v(s6QeF@ zB|l5YKIvZ1#66w8KQNOqD#Yxo?9Ow0Wi0*NH@Sq*qFxqvQo+5KX7Re~s3{1f&;Y&rZ5iLQdEZWS9lK*O zJUTk$&;tgZpqY(R9>9eNoXT6-PX~NW}}`yq7h` zPymgLjD_}M?#WPI`sVH~+&z#+ye2UA=$ZyX-i18c3%MnnDz4+Qsu~lqm%li4s#YsR z6>IxDIt-6VAk~kXZ7V>gb*fOrL$h<3tJbUNf{0VU9}1x1;cX8I0)M}~xGIc^S-nt> z=yUyj22f;nj?1>9>j87zQ?4@ z_M7)$j>0SemlXxyUdkJRp>+=5CVS{{V$GMb+1VFcmEcLEqoey76P^PwWO@*@EBgVR z*ExMdHyT6h6$ISY+l_;%6w(m^RM+Eqg;{ZrXQ=3x4h6oqw2YTlSB&)K6uz z*%N+6oJJXNclW@KL_&I&F-(q8rey(Q zaLb1j4Ytq|#3m{W{#Zv66vvR*I=+hFDuQY-vQdRk=0oCsMwX43>g6@_s|Z_gkrRD- zetz~ifV^KJIrT#ke6p`^aIYvvzQY*XRx_|rV+itg1k|7);Ock`SH~pmkR+qbH_4kK zOr2Am4?#;KCihQXjmm@HDOYetF5`5mWOzUFcw2Yr7Zs&)doGuIwWdY&#@)+LK9mwW zy@P`zhXg?&76p27!V>Dibl{c@Q8CfROnb$R3p(w@yw#47#@yt zJH~f1whkF;siJA>Uo0$SsepW`W?pq#df5j7lI-g0+Y^sVk1@tw%NTP6G(muvve9}P zUiTZFm}!(PF`gD+>N=I=Yp2R(`S9h-mw#TXk9I_uUI5WJX~)^q)06&nQ564#YyM*j&K~; z>op03m5e1sQS9sJ=(tf3 z#5*~ToAmQ+&7Q7(6ALr3%|1hBrR&-SMNz(9EUpnaRKP^1o1S?XKY%R%O?s37#J*H2 zv0swJJ9wVo3$P~P4#R{n&ukWefX|a4|8Kcmd46T3cmk+{oMr zL5SWMi9~*vF>Zv!JItiRJoDZHqidR`XH>QFkFs2SsaRa4Z#Xa4%&O)8@(2RR0*TB` zBJTzu6_0o9h{eR;;5gx0j$@;Yu>`=;cM$B~%MJ8o?-3|eQLX?Q#g#=(Q)hHt{m)XV z^5gaOH3DX(7VA*{H}L;=gaOC`iQ+giEdq)dm6W99Ks3sY@qA>AG1jZ=NHPXtYl7R2 z!Ds&G7Zh||%~vYww5n<|vRug4K%p<}5-`LX3I+p1s;~fAqowC9pePiueh4`0U*ojf z=Ejil|CAAk*VsWokn6U7LIY!;@J0q`g#r`~7(0a8Z+ib10U!d27(zfPx;>q$gGRA@uhS$k|7cOC!S+2`{+N$V_W(zs6IKGtrnwvMunlnoeyAu2!&CM3id z+Nz;F{s8e1nzk{ZLcqjB72QT*jK^S?F(fJ$}FM=ll7-Pr$qU5Z>kTVHyep&wZ8z zkWQ!NR4TQzT&~=zs+A#KH~Mv5kJZ7zFaX1#{phgnX&8oiozB<3>E7B8>$iEGF3gFd zcutc1uLOgEKj(6}*Up?dQ}F`h1wh=jYu9zETHRYJEqp-JG|^pvrtsc^ItuOp3h?`V z)kq|K#P65Cb^Q42uLEFOvM}NXz&|wf{?C?53qMm7Wwn>!Op{Fewf};PrfUHBXKD;u zS!u2X$g+GP9*^92?AWn`05rQjIRWqu4GrBkH@9#=Rn-tL{G~GBY&K2P@&Z8D{C3TR0Z`>Z*a3(;cHHpZN<}$bsZ>_68{GtG)xOovnc#6UUD7=41iT)zua0>FGPHD9TN4!aK3RC>IQ%Q}W|VSw_Dcz!iQ!BBF@Js*bFt zVpyr*&2kx&6%{IHN>;OScluB$^wRu%argA}bcxBw0}!`w-+r^AXfNox?pulJ1Ox%^ zi$?IN_I6wo3PKh|QY)jQ5p`%Y%`k9!QNf|v0$wN-F;}fwM3ZGe5SX7>eMt}mJr)ap z?9{1KFESQ*0MfQ?*X~nQbx+eYnhQH?9!LiQ_{N$pYz+m?Btg##LT%&5e|Fw>eMG5X z?^Fi=nlGWs0M|pYQ#7MBWm$e=c=+tS092BR2N1sc>TO3gt$LN+e4N;z2Zy2&Jk-;T zIBDE|*cfOq(p=p9Rnc`kp3ULFOs*a$y>o^nN&g)kJ%2p_(~KAZ`i^hevUQA-6wiR0 zDcu;2;-TJdM0sPkQd5 zSQLG86B8pz07bf)2hg!;)0Q01iW`u@w;c56>-x~)^EGW9015ub{4AcEEh3|;4YOe8 z)aDcM!B`BpukJuH5NPHD!@#_*imIaCE+eFOQ71L@2xeWik^4 zAm0LD@OP-nB6M$W44h|@`{xrE3JHp|{Y27gJ_3=r(baAc)xKoDZONZ+tVeDVmXZi$1 zF0!2$FJ8n~MkhQIpDTb38?Ll4z_dwg)3Gra#DQcVWU(2%j+RQeZ)DtJ?`|R24#*GS z>46kB$bm-ay`X8>efliss=6x+%K*??iqqzM5((VZxw;YSNzkv3j^oJOyrbPa0kMPl zWP2NSMi`^DlH&(cGstP$r2yFE$N*V8>3n~3Ev^lRYIFm*s8#XlGv|=6Rvjuz-WS|s zJB#JbDpvP2AG+Uzflaxl4_NEGupr>zU_Y*qhB7+i!20!826%_=^!xFbbU$R~5CERd&*FPi(;mXRbzscj8E~c(r*6#})jSzUr#H5k z5ZfvlkZ@?Q-x6u|&*X3*cfpc3oa!j&+KLypwE=Pq1Sh#>)!k{wsH4?!NCo#3{V~O%s|Q_?4y|({60?^ed(&zUM|<&$T51k zRl{s^S0}au;1}u(NO&$iU`hS^vpGCI!((oZHg<4!?R%M=TT*oeFfg#*m4SrMhv(D% z2y&$}Rgd49%q+`^S;TSDypzefR|FnWhzDR_AS{YFG?+q{BsI+F_(B<9JU`M1qwb;9 zyutykg=jB(za#+t{b^SQC|Ey{N}5$@eRmYARea*iIm~L!MAqt*wHC1{@Y@sKGYatl zoHTHEX99P3nq#8IasTKTj$Evj5>5=Tw9)7oZJOT|jbLjy#Q1@(!;EZ&darERtp3N< z2U4j)7Y1t1xj7ibultj=roAr6EAv#$jhVw5E9hoD9cPafHgxhE%*fBv1DJR`+Zo<==R98KjO2S_+rRf}%<@bz^ zdro#;8CbV&z>xu7vp2<}_%Ss!+~i?ORdL7pQB10}hQ`g_c@v{v`d6tWwuFL>&`ip> zm#c1_%*WFQ2!NOO)5A0adTiZVZ0DL9I{&}LMLaM*iPMVWSe)^~$9+CLxTXuYw8a@( z^P75$yM}8mrPtxgKr-2%wT)U@9FtB^WAlqtAE+&4r8S)|Xd0f%h^(fygjW*$ z#%RRsDF$WPk`!scb;s~1-YhSA3Qw+*$xL)Q_Qc8Lz_4NH(WO=(8~;c=j&Jv_0p$mq z%FXb4c2U8(O2u@_peSIiBwD^(7zQ4h%+$v!OYT0O$xKj9)6&$pCzAvJ zFbsV&zXY*a^D*jMt&4v+7BfMZvmtK!#yNt;Cm36NK}f>yo5|vr*$d7u0Bm>!K|DD% zH8wK)jv#fnDI5kk%E+2_NY0GM$m(;{|NdC%3>krGoEHX7JBaX?gFH zYKuLU$xP5_ktTDE!4_SRySux0OOi}8_{OY|y&|$sA(`*h&;$h$H^-y6wY|+uO62Gb zM)=?LuuG2qr+fi_Efmdx*76TSuU6IDvf1om0H(9>M&S#ELfsu5s}G8zxYJ8u`-Y4$ zN=!YHA6Er~NXs&M0+KmiFY8rgRL%5@H_By}P;7RgmUbn+HI@ z!-+)VL$VzHjUWhZULn=#TFW^$pm2c+rx!=`iqK(%~PVdO5UQQ$uiO&TB!3P1M z&1u7BF|cw;Tb|H$qo`?>NAmgH9{^CLV7?b%hud398d$DsYik<{2E$(yMc;LTAc$_7 zz5E(C!?tc1`o9&W{AjUQe7PR?o3%x{+PZ;)l_qoU})Mi7Kv@)h!* z%PhDd2w2c{W5O`1#}q~V+uU5?)wkxoR2@*IXwm#q46y4IPKgZ?n0*KsKb*b{hEj{V z_4i&RC^;$nkk(yetrr8lU?ebo$jRxm+~-ybjzExu(uagzGD*Bsf~-{VOTPdAP3vQt TlUn~z00000NkvXXu0mjf9)S*) literal 0 HcmV?d00001 diff --git a/src/zh/mycomic/res/mipmap-xhdpi/ic_launcher.png b/src/zh/mycomic/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7fc930249fa669f48b4682badf29142e8b0a90fd GIT binary patch literal 6497 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 Hu0mjf@b(*2 literal 0 HcmV?d00001 diff --git a/src/zh/mycomic/res/mipmap-xxhdpi/ic_launcher.png b/src/zh/mycomic/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..94950ae0133e5d57f8a17fc807ed94f4c71a12d1 GIT binary patch literal 11937 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 U+#4<6kN^Mx07*qoM6N<$f^V5VasU7T literal 0 HcmV?d00001 diff --git a/src/zh/mycomic/src/eu/kanade/tachiyomi/extension/zh/mycomic/Filters.kt b/src/zh/mycomic/src/eu/kanade/tachiyomi/extension/zh/mycomic/Filters.kt new file mode 100644 index 000000000..b4ca78d76 --- /dev/null +++ b/src/zh/mycomic/src/eu/kanade/tachiyomi/extension/zh/mycomic/Filters.kt @@ -0,0 +1,144 @@ +package eu.kanade.tachiyomi.extension.zh.mycomic + +import eu.kanade.tachiyomi.source.model.Filter + +open class UriPartFilter( + val key: String, + name: String, + private val pairs: List>, + state: Int = 0, +) : + Filter.Select(name, pairs.map { it.first }.toTypedArray(), state) { + val selected + get() = pairs[state].second +} + +class SortFilter(state: Int) : UriPartFilter( + "sort", + "排序", + listOf( + "最新上架" to "", + "最近更新" to "-update", + "最高人气" to "-views", + "日排行" to RANK_PREFIX, + "週排行" to "$RANK_PREFIX-week", + "月排行" to "$RANK_PREFIX-month", + "歷史排行" to "$RANK_PREFIX-views", + ), + state, +) { + companion object { + const val RANK_PREFIX = "rank|" + } +} + +class RegionFilter : UriPartFilter( + "filter[country]", + "作品地区", + listOf( + "所有" to "", + "日本" to "japan", + "港台" to "hongkong", + "歐美" to "europe", + "內地" to "china", + "韓國" to "korea", + "其他" to "other", + ), +) + +class TagFilter : UriPartFilter( + "filter[tag]", + "作品类型", + listOf( + "所有" to "", + "魔幻" to "mohuan", + "魔法" to "mofa", + "熱血" to "rexue", + "冒險" to "maoxian", + "懸疑" to "xuanyi", + "偵探" to "zhentan", + "愛情" to "aiqing", + "校園" to "xiaoyuan", + "搞笑" to "gaoxiao", + "四格" to "sige", + "科幻" to "kehuan", + "神鬼" to "shengui", + "舞蹈" to "wudao", + "音樂" to "yinyue", + "百合" to "baihe", + "後宮" to "hougong", + "機戰" to "jizhan", + "格鬥" to "gedou", + "恐怖" to "kongbu", + "萌系" to "mengxi", + "武俠" to "wuxia", + "社會" to "shehui", + "歷史" to "lishi", + "耽美" to "danmei", + "勵志" to "lizhi", + "職場" to "zhichang", + "生活" to "shenghuo", + "治癒" to "zhiyu", + "偽娘" to "weiniang", + "黑道" to "heidao", + "戰爭" to "zhanzheng", + "競技" to "jingji", + "體育" to "tiyu", + "美食" to "meishi", + "腐女" to "funv", + "宅男" to "zhainan", + "推理" to "tuili", + "雜誌" to "zazhi", + ), +) + +class AudienceFilter : UriPartFilter( + "filter[audience]", + "适合受众", + listOf( + "所有" to "", + "少女" to "shaonv", + "少年" to "shaonian", + "青年" to "qingnian", + "兒童" to "ertong", + "通用" to "tongyong", + ), +) + +class YearFilter : UriPartFilter( + "filter[year]", + "出品年份", + listOf( + "所有" to "", + "2025" to "2025", + "2024" to "2024", + "2023" to "2023", + "2022" to "2022", + "2021" to "2021", + "2020" to "2020", + "2019" to "2019", + "2018" to "2018", + "2017" to "2017", + "2016" to "2016", + "2015" to "2015", + "2014" to "2014", + "2013" to "2013", + "2012" to "2012", + "2011" to "2011", + "2010" to "2010", + "00年代" to "200x", + "90年代" to "199x", + "80年代" to "198x", + "70年代或更早" to "197x", + ), +) + +class StatusFilter : UriPartFilter( + "filter[end]", + "目前进度", + listOf( + "所有" to "", + "連載中" to "0", + "已完結" to "1", + ), +) diff --git a/src/zh/mycomic/src/eu/kanade/tachiyomi/extension/zh/mycomic/MyComic.kt b/src/zh/mycomic/src/eu/kanade/tachiyomi/extension/zh/mycomic/MyComic.kt new file mode 100644 index 000000000..7e1d1313d --- /dev/null +++ b/src/zh/mycomic/src/eu/kanade/tachiyomi/extension/zh/mycomic/MyComic.kt @@ -0,0 +1,206 @@ +package eu.kanade.tachiyomi.extension.zh.mycomic + +import androidx.preference.ListPreference +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.ConfigurableSource +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.ParsedHttpSource +import eu.kanade.tachiyomi.util.asJsoup +import keiyoushi.utils.firstInstance +import keiyoushi.utils.getPreferencesLazy +import keiyoushi.utils.parseAs +import okhttp3.HttpUrl +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element + +class MyComic : ParsedHttpSource(), ConfigurableSource { + override val baseUrl = "https://mycomic.com" + override val lang: String = "zh" + override val name: String = "MyComic" + override val supportsLatest: Boolean = true + + override fun headersBuilder() = super.headersBuilder().add("Referer", "$baseUrl/") + private val preferences by getPreferencesLazy() + private val requestUrl: String + get() = if (preferences.getString(PREF_KEY_LANG, "") == "zh-hans") { + "$baseUrl/cn" + } else { + baseUrl + } + + override fun chapterListParse(response: Response): List { + val document = response.asJsoup() + val data = document.select("div[data-flux-card] + div div[x-data]").attr("x-data") + val chaptersStr = + data.substringAfter("chapters:").substringBefore("\n").trim().removeSuffix(",") + return chaptersStr.parseAs>().map { + SChapter.create().apply { + name = it.title + // Since the images included in the chapter do not distinguish between Traditional and Simplified Chinese, the default URL will be used uniformly here. + // Additionally, using different URLs would create more issues, so it's best to keep the URL consistent. + url = "/chapters/${it.id}" + } + } + } + + override fun chapterFromElement(element: Element) = throw UnsupportedOperationException() + + override fun chapterListSelector() = throw UnsupportedOperationException() + + override fun imageUrlParse(document: Document) = throw UnsupportedOperationException() + + override fun latestUpdatesFromElement(element: Element) = searchMangaFromElement(element) + + override fun latestUpdatesNextPageSelector() = searchMangaNextPageSelector() + + override fun latestUpdatesRequest(page: Int) = + searchMangaRequest(page, "", FilterList(latestUpdateFilter)) + + override fun latestUpdatesSelector() = searchMangaSelector() + + override fun mangaDetailsParse(document: Document): SManga { + val detailElement = document.selectFirst("div[data-flux-card]")!! + return SManga.create().apply { + title = detailElement.selectFirst("div[data-flux-heading]")!!.text() + thumbnail_url = detailElement.selectFirst("img.object-cover")?.imgAttr() + status = detailElement.selectFirst("div[data-flux-badge]")?.text().let { + when (it) { + "连载中", "連載中" -> SManga.ONGOING + "已完结", "已完結" -> SManga.COMPLETED + else -> SManga.UNKNOWN + } + } + detailElement.selectFirst("div[data-flux-badge] + div")?.let { element -> + author = element.selectFirst(":first-child a")?.text() + genre = element.select(":nth-child(3) a").joinToString { it.text() } + } + description = + detailElement.selectFirst("div[data-flux-badge] + div + div div[x-show=show]") + ?.text() ?: document.selectFirst("meta[name=description]")?.attr("content") + } + } + + override fun pageListParse(document: Document): List { + return document.select("img[x-ref]").mapIndexed { index, element -> + Page(index, imageUrl = element.imgAttr()) + } + } + + override fun popularMangaFromElement(element: Element) = searchMangaFromElement(element) + + override fun popularMangaNextPageSelector() = searchMangaNextPageSelector() + + override fun popularMangaRequest(page: Int) = + searchMangaRequest(page, "", FilterList(popularFilter)) + + override fun popularMangaSelector() = searchMangaSelector() + + override fun searchMangaSelector() = "div.grid > div.group" + + override fun searchMangaParse(response: Response): MangasPage { + if (response.request.url.encodedPath == "/rank") { + val doc = response.asJsoup() + return MangasPage( + doc.select("table > tbody > tr > td:nth-child(2) a").map { + SManga.create().apply { + setUrlWithoutDomain(it.absUrl("href")) + title = it.text() + // ranking page not support thumbnail + } + }, + false, + ) + } else { + return super.searchMangaParse(response) + } + } + + override fun searchMangaFromElement(element: Element): SManga { + return SManga.create().apply { + setUrlWithoutDomain(element.selectFirst("a")!!.absUrl("href")) + element.selectFirst("img")!!.let { + title = it.attr("alt") + thumbnail_url = it.imgAttr() + } + } + } + + override fun searchMangaNextPageSelector() = "nav[role=navigation] a[rel=next]" + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val sortFilter = filters.firstInstance() + val isRankFilter = sortFilter.selected.startsWith(SortFilter.RANK_PREFIX) + val url = if (isRankFilter) { + "$requestUrl/rank" + } else { + "$requestUrl/comics" + }.toHttpUrl().newBuilder() + if (!isRankFilter) { + url.addQueryParameterIfNotEmpty("q", query) + } + url.addQueryParameterIfNotEmpty( + sortFilter.key, + sortFilter.selected.removePrefix(SortFilter.RANK_PREFIX), + ) + filters.list.filterIsInstance().forEach { + if (it is SortFilter) { + return@forEach + } + url.addQueryParameterIfNotEmpty(it.key, it.selected) + } + if (!isRankFilter && page > 1) { + url.addQueryParameter("page", page.toString()) + } + return GET(url.build(), headers = headers) + } + + override fun getFilterList(): FilterList { + return FilterList( + SortFilter(0), + RegionFilter(), + TagFilter(), + AudienceFilter(), + YearFilter(), + StatusFilter(), + ) + } + + override fun setupPreferenceScreen(screen: PreferenceScreen) { + screen.addPreference( + ListPreference(screen.context).apply { + key = PREF_KEY_LANG + title = "設置首選語言" + summary = "當前:%s" + entries = arrayOf("繁體中文", "简体中文") + entryValues = arrayOf("zh-hant", "zh-hans") + setDefaultValue(entryValues[0]) + }, + ) + } + + private fun HttpUrl.Builder.addQueryParameterIfNotEmpty(name: String, value: String) { + if (value.isNotEmpty()) { + addQueryParameter(name, value) + } + } + + private fun Element.imgAttr() = when { + hasAttr("data-src") -> absUrl("data-src") + else -> absUrl("src") + } + + companion object { + val popularFilter = SortFilter(2) + val latestUpdateFilter = SortFilter(1) + + const val PREF_KEY_LANG = "pref_key_lang" + } +} diff --git a/src/zh/mycomic/src/eu/kanade/tachiyomi/extension/zh/mycomic/MyComicDTO.kt b/src/zh/mycomic/src/eu/kanade/tachiyomi/extension/zh/mycomic/MyComicDTO.kt new file mode 100644 index 000000000..94eb6102a --- /dev/null +++ b/src/zh/mycomic/src/eu/kanade/tachiyomi/extension/zh/mycomic/MyComicDTO.kt @@ -0,0 +1,8 @@ +// ktlint-disable filename + +package eu.kanade.tachiyomi.extension.zh.mycomic + +import kotlinx.serialization.Serializable + +@Serializable +class Chapter(val id: Long, val title: String)