From 095f00592d107873c99054e27280e7aa88757d09 Mon Sep 17 00:00:00 2001 From: Daniil Berestovoy Date: Tue, 9 Apr 2024 12:52:22 +0300 Subject: [PATCH] feat(src/ru): New source: Animelib (#3138) --- src/ru/animelib/build.gradle | 12 + .../animelib/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3247 bytes .../animelib/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2218 bytes .../animelib/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4515 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6837 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9986 bytes .../animeextension/ru/animelib/Animelib.kt | 495 ++++++++++++++++++ .../animeextension/ru/animelib/AnimelibDto.kt | 179 +++++++ .../ru/animelib/AnimelibFilters.kt | 192 +++++++ 9 files changed, 878 insertions(+) create mode 100644 src/ru/animelib/build.gradle create mode 100644 src/ru/animelib/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ru/animelib/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ru/animelib/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ru/animelib/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ru/animelib/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ru/animelib/src/eu/kanade/tachiyomi/animeextension/ru/animelib/Animelib.kt create mode 100644 src/ru/animelib/src/eu/kanade/tachiyomi/animeextension/ru/animelib/AnimelibDto.kt create mode 100644 src/ru/animelib/src/eu/kanade/tachiyomi/animeextension/ru/animelib/AnimelibFilters.kt diff --git a/src/ru/animelib/build.gradle b/src/ru/animelib/build.gradle new file mode 100644 index 000000000..79f45dd8d --- /dev/null +++ b/src/ru/animelib/build.gradle @@ -0,0 +1,12 @@ +ext { + extName = 'Animelib' + extClass = '.Animelib' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" + +dependencies { + implementation project(':lib:playlist-utils') +} \ No newline at end of file diff --git a/src/ru/animelib/res/mipmap-hdpi/ic_launcher.png b/src/ru/animelib/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b3c00da43ab3838edf8e3d4df22e8766dd230b0f GIT binary patch literal 3247 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 literal 0 HcmV?d00001 diff --git a/src/ru/animelib/res/mipmap-mdpi/ic_launcher.png b/src/ru/animelib/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a92b0439cbc5155feb8234f7565339009f68597d GIT binary patch literal 2218 zcmV;b2vzrqP)$ zX>1i$6h8BoZoEYWk*yR^G_n*Zg|Z1Q;6{lk#)Pm4RK zAZusbd;hrCnwp!R3WviGi4b`TyF1+CeOO?O4_M`j7>EcQs^1JPa)T`baWRu1 z$dN!c4p)<$z>txrI4%jiu5QrN_Xs;93p2~JtR|52f8tA&n?luaIIso6(TmEx=9wxL z`SAW_NQnR+K<@!+s|y~2K$tYHpk{=`sSKfLGn{WZj05s)r>4&Y*+&3WdeL^ROS85K z3@W%o^?=WX67q2gMdb(_Z~PXjgS&;iV}Y$$Nl&cxtWW)>M1WgP0>7&VBfurX37l=- zEd&%-h*V~+Z2go72xqYR18m@ zIthV>MvKZT>=B>;g}g|P48^fSy_^}Cl)Sx7IyCX4niS56EK_mXxojc*0u-o2E{z!#Vphl3mJik5`o5V zbV01Gwpm$OP&EBOqo0pXf8vAaMF|+ zu&-i&%GRg;jvU-;FNg=^4^v`*<8(qAPUhTLeNDjy!G!Qm!SkJ5< z35$Hc~s7io`l(MPwYkn@k z(=nyawQE+x&>;ov+CB`{wd>Yn*0}%+=FfoH)3AwFA)clt~j|(Zcx*6a_EI=gp08Gp#>5VLUv8GHTbZ9lQSCrVrqiSJ!Ea zwq=3SX1hxwU<7RhPUkLs=|xYgH`6%u^3*Y77|(do2%Kp89xjCbQc2jBQ0{=i79P-pqe1fiMe!!Wkv#J+vaQB8Do-6vL=P0R zG|F=I(POZ9$x>4?&n;a7c?0_6ER~j?0E$SXj9FKSc^?jAFi#SCpk zpnID_Ot-YU(+UL4^e?PM|9-z8-hX!^v~S;D1yuCpEUdogG}?|igXT(aZFrp#rio%> zVd#vqS9Jd;Q-nsdiA(a5vrw#1Dor((GzwyTBdIZpM;Ry zsNQae0DT|0u6J(U5quBviYF5VbaLQYva~uuI#0gwX?*NirzD*|Sh*)38)<#;T}kVI|ID$q8uha5yCVJ|VxcfB)VU*iMy?2=KT!bVd1#@|?d{ zuYSuMF6Vd|qz-oVZx#coL5;r~7jw>l94W0lP_Y`X*5OX;_UeZ|BLO-mFVN>0kMhso zFs{yLR+>i>SOQJKK>xHVrhcF>lOwg!WQB+jc=8Gt@0Hy|5YYEw0!=%S(R^J=3`$u2 sN&`2VNf6OTwQ|?h26x#$z2*u03ruZhi{o)r3;+NC07*qoM6N<$g4~K3F8}}l literal 0 HcmV?d00001 diff --git a/src/ru/animelib/res/mipmap-xhdpi/ic_launcher.png b/src/ru/animelib/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..1636c0daa7d271309fe85f3fe98049acfaf19fa1 GIT binary patch literal 4515 zcmV;U5nS$xP)vLh&8@$Y(_hzSsOz7yTwd9VYISv+wK33A6_Bh; zE^r<7xcp1juV1$mGt>qSMvAE%i4efRj~z5*NV}B8)HRh=l^rT8E5YZZIyeMq!8QTk z83Gh!Y7n+Vt|igBvSn;NZZ{+(CO}eR;-2ct>JeXm{jVPbB#=g!YJvy>9+G@K;%~h9 z)=j0QW!YXYmCK}8Loi1jtR$;GAZgXlN&}S5vjSXuU5TZ(o0Qk%@j%nGrklUqxb6l- zr3Q}+c$jK}6#-;+h=BNEH{CMz+}ZLcOu^@nHG^O~M6QVV#YQbao z#>U1%YHFh?n>K#2GC%^EB-vDOk`)02ek>k|*A5-N`FweKmZ9Wxz~=#GM?$&x>rqs7 z%Sqp&CPa(?YD{Ws<4s?0-Z%n(Rt89@GZ`8Z%m|=slJw)zsQwxLu zm8}FpXA(l_Tg=RlRXb4&N_TDlhJ^Jz9#wc4`T{Eg$o41Tk=&>MRVU2BcjGV#v%BOX z^&QabpQsJ?`pKN4Y}=52zV_6$L9}kg9coQeCoBGF(R$9_6(e<*^R|&Olb&*wssw`5*WI7 z-*?-89Uy?r5Oc;l{LBa-bE72S2i@Hg0B&d+-w9eL4uDusGX9T6T8!fjHAzu{5`b!N z8GKi|9BTd4mp}@k`O#~Sxcz7MA^~mjcNrcPp&=jufE(fRu4 z&g-p)-Dj8A5fE1CmpZL#rWpaOzo8+3W7{PH5_%&6qyffKY+yNf`0Jc)G!Y;o{nRPv z3FtdW)&Na%p$W>6G(b%N&!O^TM&_i^JwBg819%QT0^x@`f#S!!!a@LnOd6miz$x&V z#ghmqeFLif=+mOu{3!ihNC{8^tR;Zw&@T9BIINX)y*BB``Lgvbt2qouD%SCbxAl;I zC16GpZD#+?oOehF;7K+kAUy${FelaE5OQbfE2d6N3<%71iAaA)d_b>01GzrH+zI0h z#HS{J=Lh&EOE;O&Yf%KH-%4m4*8m;?6!`ME61bxv2DFlZpuuO(KtVx$gL+l~%2g>B zjjRR>YJmwU0m{y63DAPf2nZ$kd@$_+R-fP-ul|q_pp`nRSV;g6WFlZkiP{GkIXrGG z$l+n9c-`WYudoo%v(J@WA3y}8$MYv*)G(eC<~5jmjyLhcpvF7`s3KVd^b;}GIV}N35l<`WkBNUD zK6z`saP)^CVdt)0P*qheTXCVttTr@TKj{xS0m@F$Yw;b)s z9Xofytl!UpUw-*Tb*aAKi`sw67d8UixMWNkkdf4fgQcJAgpIU;yOM@u@pf(7!tytk zLF2|LLIhM*RYAdw+3@X_BE{Y%{SsWL%umP(PztF>3PX0b zp<~Amwg@4Z<`6wG0b^>?{GSna?GPYIq!i#!rD(hKvve%)wxCCYt+ym{~x8vqpgpT;NH~tc^cIJ*(23upCv}+I+|1-iI*8pPz zs7e>^VT{MH1npu}B-}_PEhF-Jrp(6KG)D2B7Z)#r{{8yufF%hl+PV#%e0mX-pDTxZ zXBEJZ!PjbHMDlHi4jqEqZXXR7F3{d6ZL(*27`Un~8W0i|0t`nr>K1Y(Q|gSt)_E$o zEsp))UjAoDNzsq}X=wT3nvalxXAxL0OrA6z#^;ZQMvWSA$r_zM5w>sNsk!F7<5dzA zG6IA^w~%-%@ag)L$rEAH#BmT87pDXD`0*34^p$0>=I?8zYgZ2FC(RQwGdpt0UiHrV zuwdciDxK5mf=$z7r45b~kkg}|fe+9Mmgxf_hElKWP*P$Ny!!HD=+dRLF7`tq=c1ym zFn_^gaP+9WTe5kxW-xcoY&1jHaEGhMjva@QcZ`M7vu7o}vjX1=T#@VHC&0kDs;rTT z$x-I()w3r&iLsxiO`Gb#s;H=d577KPh4$a;t=p_SaeO}HkG%`h(wgY*sl?F4{r4Bb zy3g0^2oPDR3nru;9s&eFH#0XpNh0SvYvyzqb^C3QkU%@*)#=!=WAMzP7vS@MZn$`X z0P2yK19R`24Ov;4I%iyq>jY~*`4k>1oR9Mc^$u&RQICkU^9TwZ0fM001)iaqp56i; zTR0zbb8__N2f^D?v<>FWdk`a?^4OkrJ|#IB3Lly$nIU>iNTqq$=7R?h!K~T$!I2|% zmedLGc?8ip=LyK`E93)=MmAbNbfO(Nal^2oFk|{uXoU+f+EiX%4)4CV8WugjL{L>9~%7>{^=3;=G!gYrN)jOu7F2TdonR_r(QS4{Yf|v*s$?Sn2WxE9MTiJN$}$`$pnF~)ArmBOYGh*6-5xdacajNd(Lx_wBLFD= zbN)O%aAKS&ZWI&a;m(TB;xP2>6|3OIrLSHrKonRJ^Ar^Xh)mRYew>`>yt%V+?RO|Q zux5(7;6)m?Zu;sgc(CwcphzlDJGJePb2Y|n>LFHY6~2z z*rq$7$rmy}D3mdBaoDo#Lcq>BdSEew(UDq*OhH$1n~MBb^@|< zg7E?7p=sLVNuh^XGp7Oh0bV*&TnxAVcBHiQSeN+aDuGHy;8(186F2kzhFfkimP_*i za>(ozJX%2^0%F~DK0sMe)Dj>%I--0OI;PRjn9+9{?)hB(!5Vnzj|*&p&oUQGyBnt7 zJ=svR$OkN5vJ_69I>jB5<}^|JfT$!u6mXt7qR_)kT*(?VkZ*n{jz48e0TgXxp#y8l zSAs+f^()_c9k(>nWJ;eXB=Pj3=W&6D#`Ee#{mM<7p>o1eL4aMrsnJIFWTdCVjTm^# z?%IV508N@+!qLiw3-b0tUNZ7WR42uQXrU%MyNje@%68E2Lx;b|WzCPJ$ywAB(6xIn zTk`-Bq6i>-yA-6QHes(Bx`=}`*}<59dAa@>W0_PVLev)$aA$SPjFz~?Q5{a8TofB3 z-@;x#sMXS_(f|nU<EiMa( zpZW(oL}OX8?i3sz^B;)~dnm#_0p_;7Za8YH5W1nEHaAa_X&JF|YCg_l^)p~m@U2=E zg#?HJ9!lU@*>SE^Bw(zL0H?sGdLm4KJ+SS79*nuED_?F`yt|2x04KqZ5CM5X`vB3- zTRBFv>&k0N0z~V!GCA7o5zqi}0_=3!3iMz!f)Nnw=0`#8g00W*$6XP$D8B)`etI{z zJ~_T7+&SBr06Tzd&4n2lR^%96_u%WU$p<8OnulPEiyvRZRsqK=HsQ{QBAiC@-%KAe z0)heC4(L`AZ*^TJ#RV2AX!}bIF zcHV;j(`r)C-wz-HE`C8Hvs3mYaCsiqZu_<)I-+D*<+HkOr%g`hmD^T3_u#%gZ{ZKx zbVS3XpueC&ffRa9lperM>5!Sd7GIi?rCUEV>4hDzMDmK{aT-+7@~CZopMUG21OFKr zFhBGl1HHU1sBg$nz3eMW(syK9w{D%8n9}4m3~;q^yZLV~u?vuBe$jlQU^$yles%%j z-(OO4dQ!>h(?3Wck7G^R75@c>fBljHI3p0-s5L(BBbbT0p*lNFYt1kq{m9Kb@z6HW6j^J(_TU z5biq2*waDa(#P6p?+n>{0-pX7_;lV-`l-Pppiv&_L!NlhsEFRkLEzJGB>~|EAR6jZ z5PD7Pes8`WJf_n-taJpCL|$y_q(UMZ&F>UyH@p*q>HbNN5bYHDhswzk%22wN!juarnI)?92r#(E3#G|5Ag$aH$YZa zCS+!29rlJi<3IW2{f!ZbC`i`$NC=WHKxlb<S_oE5$O7h zDQLqg$tx^k#?*jt0U(ir8dS*6%`odB-+tA4*ryMH*XxC}v@~elvelN#isMr@ZQAq= zsYOi$B)cG+3y~^7)cP3kkURZ~D@V>LDJ#3Jva+&)o6>=Y=k8d>89~4*6h~2eVRuuK|+2HqkM}PL|r|U>tt4$C|yD}Ak%+@EJJj_3A z_`lCMURpBE>bAI6gyXsrWqlZiBjPn}EDGEA+Pl~o0i+6>wYQG$tYuE_3txP(;c-&& z$_PXl55){1jC~B(MedBjLw>)!q^$IJR;lS&9vyhN7D6HZQH{lvtz?1%=!P^md>L|b za@TJ8a^tNeZH2{^NsSGuS|A$x1jxfO2New4SYA->R(4$<)*9;y@`G9m$fZw?ukz#{4|9havnY_tClhN__|csv5Wyd_YzK1TW&#XqdN z$OO>QE%v~ko!@kd07Ttb%mAYCPbPU_*0~p4a!_RB>f!N0m+YaC>+eXipfL+yJj=v> z+u2WL8M>&lLbY(DdF-hg6+S}hl<*;C9+;h!xG9v z35p7nrkC;0YVFe03BeJZk9#Bn+x4r-U#XBXWivCJjN@m z0uaE?-iM1IQDxKnw$;6;NxyLlu)O0I5Q&n%>Ujn`KQbP&XnI za}0!IL3FJU+Z~Wk904@oe0B_EekuZVM(!xmg=YigHat8}NflrPNLeunus*z4Ol1JE zQ2`Y2wk9#qXeK}+3&tJcRt%iY3TTV~DMKz1$S17@qKyr^FnfSv0gsIJ!8B%o_=B0u zg-f>PT_u241wu8w$bChE=;U)@=7zEWN+di+FRW-Wl-C|JAW&9J6LDWj2aug2>;U4! z6M|qUdSzqOtIiuk;)HzWx|LNOfxRWK8B-03vOYTCDh+T-xUZxEh^GWIKq9MyCiht7 zZYZt(Uwik!jkekJnB7WEumXy!_L1RM>})hu>%(^BRuLvN2I2;|5q(mC(godkOdcfj zRENse!_f-dG|=#3#TPsf!k^j0rR=&mg{j0oI^e3;)ow9dLpdZ2p#1YLW=>_8t6ATT z&*3XO_55rGGMZH=i6T*|?^sDM}ixebqw1&H`N zCCliRHGFl%!*yY?8mYrM{$mW$}0c6{wu(&W?czCWuPa*6; zsxibqJb5GsK%Cx@9Y9QzYyyY}k8aQ`&gagcpuL2O6Os!iF z#OaHL$N=I`Wqg3*3Xev&y)jvzMgfrD+XlLmxiBF>900~>xm!IiQJwAILwO5C+m^Hzh*l6?m=K^yyIBAUU7v8FntcMV*8|sI zHxdS3cmepy5hx7+ve6PAU9dn8xtl7_y6G`eD(O9gH*}5eKKs+Tg0kSa)R)As!4+^kN z>sGLI@j~d_8Mhj#UxkH7VZy{oaPZI}BXeW4J_)rz{Ra$`?uA9UFz#%6eGC*!c(CkC zE*S{3pM0Dgx|F3(56OYMavy!{N%+U=HC%vHT~w@NA8Yvuvp~uKNld2FZhT=So_oZ; zM6>#0_(F#3y5;6ETJX?JYu2oThyV0QQd%FLRW!>d=>al&VJ&X}zXU)*97rVNKs
    yuCy)^EUta=kE%3*(LXSpjkz9y}Xx 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.getSharedPreferences("source_$id", 0x0000) + } + + override fun setupPreferenceScreen(screen: PreferenceScreen) { + ListPreference(screen.context).apply { + key = PREF_SERVER_KEY + title = "Предпочитаемый сервер плеера Animelib" + entries = PREF_SERVER_ENTRIES + entryValues = PREF_SERVER_ENTRIES + summary = "%s" + setDefaultValue(PREF_SERVER_ENTRIES[0]) + + setOnPreferenceChangeListener { _, newValue -> + preferences.edit().putString(key, newValue as String).commit() + } + }.also(screen::addPreference) + + SwitchPreferenceCompat(screen.context).apply { + key = PREF_USE_MAX_QUALITY_KEY + title = "Использовать максимальное доступное качество" + summary = "Для каждой студии озвучки будет выбрано максимальное качество" + setDefaultValue(PREF_USE_MAX_QUALITY_DEFAULT) + + setOnPreferenceChangeListener { _, newValue -> + val value = newValue as Boolean + + val text = if (value) { + "Предпочитаемое качество пропадет после закрытия окна настроек" + } else { + "Откройте настройки заново чтобы выбрать предпочитаемое качество" + } + Toast.makeText(screen.context, text, Toast.LENGTH_LONG).show() + + preferences.edit().putBoolean(key, value).commit() + } + }.also(screen::addPreference) + + if (!preferences.getBoolean(PREF_USE_MAX_QUALITY_KEY, true)) { + MultiSelectListPreference(screen.context).apply { + key = PREF_QUALITY_KEY + title = "Предпочитаемое качество" + entries = PREF_QUALITY_ENTRIES + entryValues = PREF_QUALITY_ENTRIES + summary = "При отсутствии нужного качества могут возникать ошибки!" + setDefaultValue(PREF_QUALITY_ENTRIES.toSet()) + + setOnPreferenceChangeListener { _, newValue -> + @Suppress("UNCHECKED_CAST") + preferences.edit().putStringSet(key, newValue as Set).commit() + } + }.also(screen::addPreference) + } + + SwitchPreferenceCompat(screen.context).apply { + key = PREF_USE_KODIK_KEY + title = "Включить парсинг видео из плеера Kodik" + summary = "Некоторые видео доступны только в нем, но он может работать нестабильно" + setDefaultValue(PREF_USE_KODIK_DEFAULT) + + setOnPreferenceChangeListener { _, newValue -> + preferences.edit().putBoolean(key, newValue as Boolean).commit() + } + }.also(screen::addPreference) + + SwitchPreferenceCompat(screen.context).apply { + key = PREF_IGNORE_SUBS_KEY + title = "Игнорировать субтитры" + summary = "Исключает видео с субтитрами" + setDefaultValue(PREF_IGNORE_SUBS_DEFAULT) + + setOnPreferenceChangeListener { _, newValue -> + preferences.edit().putBoolean(key, newValue as Boolean).commit() + } + }.also(screen::addPreference) + + EditTextPreference(screen.context).apply { + key = PREF_DUB_TEAM_KEY + title = "Предпочитаемые студии озвучки" + summary = "Список студий или ключевых слов через запятую (экспериментальная функция)" + setDefaultValue("") + + setOnPreferenceChangeListener { _, newValue -> + preferences.edit().putString(key, newValue as String).commit() + } + }.also(screen::addPreference) + } + + // =============================== Details =============================== + override fun animeDetailsRequest(anime: SAnime): Request { + val url = apiUrl.toHttpUrl().newBuilder() + url.addPathSegment("anime") + url.addPathSegment(anime.url) + url.addQueryParameter("fields[]", "genres") + url.addQueryParameter("fields[]", "summary") + url.addQueryParameter("fields[]", "authors") + url.addQueryParameter("fields[]", "publisher") + url.addQueryParameter("fields[]", "otherNames") + url.addQueryParameter("fields[]", "anime_status_id") + + return GET(url.build()) + } + + override fun getAnimeUrl(anime: SAnime) = "$baseUrl/${anime.url}" + + override fun animeDetailsParse(response: Response) = response.parseAs().data.toSAnime() + + // =============================== Episodes =============================== + override fun episodeListRequest(anime: SAnime): Request { + val url = apiUrl.toHttpUrl().newBuilder() + url.addPathSegment("episodes") + url.addQueryParameter("anime_id", anime.url) + + return GET(url.build()) + } + + override fun episodeListParse(response: Response): List { + val episodeList = response.parseAs() + + return episodeList.data.map { it.toSEpisode() }.reversed() + } + + // =============================== Video List =============================== + override fun videoListParse(response: Response): List