From 7ad0d2879ead7b85595cfa2bdb2b7974d76fb8b9 Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Sat, 2 Dec 2023 07:29:54 -0300 Subject: [PATCH] feat(src/de): New source: Einfach (#2595) --- src/de/einfach/AndroidManifest.xml | 26 ++ src/de/einfach/build.gradle | 25 ++ .../einfach/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3283 bytes .../einfach/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1981 bytes .../einfach/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3958 bytes .../einfach/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7262 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10441 bytes .../animeextension/de/einfach/Einfach.kt | 310 ++++++++++++++++++ .../de/einfach/EinfachUrlActivity.kt | 42 +++ .../einfach/extractors/MyStreamExtractor.kt | 50 +++ .../einfach/extractors/UnpackerExtractor.kt | 31 ++ .../de/einfach/extractors/VidozaExtractor.kt | 27 ++ 12 files changed, 511 insertions(+) create mode 100644 src/de/einfach/AndroidManifest.xml create mode 100644 src/de/einfach/build.gradle create mode 100644 src/de/einfach/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/einfach/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/einfach/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/einfach/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/einfach/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/einfach/src/eu/kanade/tachiyomi/animeextension/de/einfach/Einfach.kt create mode 100644 src/de/einfach/src/eu/kanade/tachiyomi/animeextension/de/einfach/EinfachUrlActivity.kt create mode 100644 src/de/einfach/src/eu/kanade/tachiyomi/animeextension/de/einfach/extractors/MyStreamExtractor.kt create mode 100644 src/de/einfach/src/eu/kanade/tachiyomi/animeextension/de/einfach/extractors/UnpackerExtractor.kt create mode 100644 src/de/einfach/src/eu/kanade/tachiyomi/animeextension/de/einfach/extractors/VidozaExtractor.kt diff --git a/src/de/einfach/AndroidManifest.xml b/src/de/einfach/AndroidManifest.xml new file mode 100644 index 000000000..da5c29686 --- /dev/null +++ b/src/de/einfach/AndroidManifest.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + diff --git a/src/de/einfach/build.gradle b/src/de/einfach/build.gradle new file mode 100644 index 000000000..87115650b --- /dev/null +++ b/src/de/einfach/build.gradle @@ -0,0 +1,25 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) +} + +ext { + extName = 'Einfach' + pkgNameSuffix = 'de.einfach' + extClass = '.Einfach' + extVersionCode = 1 + libVersion = '13' +} + +dependencies { + implementation(project(":lib-dood-extractor")) + implementation(project(":lib-filemoon-extractor")) + implementation(project(":lib-mixdrop-extractor")) + implementation(project(":lib-playlist-utils")) + implementation(project(":lib-streamtape-extractor")) + implementation(project(":lib-streamwish-extractor")) + implementation(project(":lib-voe-extractor")) + implementation("dev.datlag.jsunpacker:jsunpacker:1.0.1") +} + +apply from: "$rootDir/common.gradle" diff --git a/src/de/einfach/res/mipmap-hdpi/ic_launcher.png b/src/de/einfach/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..76d30abe6ed55dd11e326830ea9d16cdc2d04fb3 GIT binary patch literal 3283 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 R%boxL002ovPDHLkV1o9qLIwZ; literal 0 HcmV?d00001 diff --git a/src/de/einfach/res/mipmap-mdpi/ic_launcher.png b/src/de/einfach/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..fd44930444df6cb554d87f8f7619eca9732fae9c GIT binary patch literal 1981 zcmV;u2SWIXP)1-1St(NsaJf3zZM|5zbVT9LMdwAxmv(y}y^JRnsG ztx&7bLPCGUps7TBp@cLLC5qnL9#*$`5Ti9QyW4Z_V|VV|xsQ#-BDgYc?%bI( z=R4myXU@!e@R)x*kGcMM0^t8<(2fCq=hd1?&)xL=&3~-BrOX&D#4RpcPzs>5wA3Gs zMr$W0CwInTv7kON9#>`XHzQM|3Vr%Jx8LTu=6U?y8+#bRfm@QDT5h zACL32n7R=C8I7ro*t5ao)#aR6^JuI_>02EeM@EKkWNK>ad3rFgUk@hhIU_*uoKtvZLTFj00Wb?Q$RWX^n*t0_b zifI-bm+hc@qyP#F3nNBr^LVzD2AsY~C0FjC%t?2=g`1@fV5Tgj!<5WrtlY>ofKVuu zV8F?R%*raf%p|pvFT^Ps=;?M9P8&r4uRFK31YM&MT1>m&_-C?t(a25R7nm ziwwASC02$PmoaF=n7+Fw+{O&R6GvV&UOa&?WudTj7Meq8^j?r+Af6aw2}IvyIGGu8 zJ@0pd0i0aJz?_=0r0(RJfr5epC5YWH;Am+MOwAu1f$)A|&yuqX9t29_=^!L8fl7`k=G5En77*A=f#2C?P~D9X-3 zhOKyY&0I|0xrxf^4)hN{ zi(|)*;mVaO=l9{cv~LseB3ZM0D|G<=C=%a&o&rcLPU>%;c#+c7ve zNZKg7s0#ob1Nr$8c7x)KOtf!%jSAQiJjnFnU{^O@{w$0oOP1jH@#9##b{%fqxQ@Mh z_oBPI8$CTexZTo%@~580?n@W3Ve@9JT2+Q^+g?`yA31Ua7cN}DwQJYV*4BpAt5>6} ztV}U48(?f~45v?@#+fr`uwcOgG&eV+v$GR*b#*!g?g04xel-RN^iS`6fM>?WaW_7V zH-2cs&YCYkCpI)THe$z)9R%P8mM>q9jT<-OTT<|)OC9jhyt-e1K_gkazP?^zh{3hD zx1+VS60h5;KS{`K{tPSn3bp;LvsadGBr_>dfgd-RzSP#L3rB zwa|pafhM1VI2Ow@oXCq^kKraj2F(Nr2nT#Ment^%eQi5cLvU9SjoEE?fGL&PVa24R}N~tbq zb#q}hxA9rAUNOQH17Vw62|f>uWD@}4BeM+m352+ai6jtxo-9L2loq?(1u@-48UV<^ z#K;KV7*Qh}2W76L)=SnbsCAA=w>DU`j@DJ;NAX`yX_Q^a0KgEKNvT$>$b#MJdM0Tg zW2WQ&1bB6j69aLQ;0eu|HA}*P>2k})#oQ=tmF2XeO&);G0F;u?0KjcJHM>tDMht0E zQhM7*uKBGK11f;b%uHzvSb^c)SG^^&_I262^mKRSLa6{|%7AjG!2zso7FKd3v1*CS zPcB4v>&~Tw&*zgeAZ8T3jxoEAn`g6zsiA9$!O?}-ARz+KN8bU1)kKXI*-uPa2w<*v!uvT5r1K;_Nj^^dKw4_s2LdbnBegKK0c!U}*(m_H(xJ{= z8dN}y;s!p=4@^4c(R1?Pl9s|YgH@?{^zSZ9XG=ez#=nb=QM)HvUnfc?j)Ae_nVRx4 zrs&l|YQI0U?)<~o-x4XM1mHK--x-8@$71?eDE81gJu(4L06a2NTP*Z1;`oV+bc=0b P00000NkvXXu0mjf=efNj literal 0 HcmV?d00001 diff --git a/src/de/einfach/res/mipmap-xhdpi/ic_launcher.png b/src/de/einfach/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7401c072a04d3e2b5e7b024590e1d9518f397c94 GIT binary patch literal 3958 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 literal 0 HcmV?d00001 diff --git a/src/de/einfach/res/mipmap-xxhdpi/ic_launcher.png b/src/de/einfach/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9e44d1e1afd216b8437457b259a9cc243476eb07 GIT binary patch literal 7262 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 literal 0 HcmV?d00001 diff --git a/src/de/einfach/res/mipmap-xxxhdpi/ic_launcher.png b/src/de/einfach/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..3992677582d9bba206ed9fad878b7eaa5fc690a7 GIT binary patch literal 10441 zcmcI~7b38RcX3P-W}& z=wBCiN^~Adc5zU{eYcXR^@#b4m92re!4LL*ym;bzYNcCp-&&K zj(7F{Gc0lw8cmHU-Xa3<7J-LMBig~0L%Ko7AKAG)S?E z?vto9OpuW2{1s(=OByP%x*?lucoc`=)V@ZD!6tcG@Bj|qJ>06r<#eMjidiXIB5j%e z&Fk0CqY)qaDuyPZ-afyP7i&xkC8=+Oo4Q2H9d3_n4fOSeJczj~c3@tq(g6;gp|~+k zH(ROiU$J4KSeTC%t1lc<0snO+)V=1*1=o>ZxVX52UO_$OMz!Vc54RVSOG}z2CMJ^; z!8iO1&$=sYL7aNdxvr6W?loYCx($ZXu&QQX674hJ;!zgMIQ}F=! z{ncxaNPK)8S%$As64cph;5w?cWcj+ZKqJ*1MeFpElZRbSz0nX)^GmDeUAup-5&NEM@NFT+o^6~0gG-k zNx$23*VL4h@>flsA7A2E=oJhHKWR1*k*=WqRmn?HV8XQYlt(iq+zK5!|52s;b1&bA z1yL#itKNFot-<;-dK3WFBd9|H|KV3AZdX{31c+|Cdhi<6Jbhm@&i(UG9jnj|TX2-u z`b5-=O55*GQg~;(MvuPnTY8Ifr=0Y2RY(lo9-KlTaSVUnSv{+TMDYMX$+?UUO4u|~ zgj!l!{10;!BC2x7xZ}${K1nwd2}r$syPD2tA*ZLL)RTct&huHsfZ=!s^^N#|{0b7V z>mH$<`gw)82tviin~GAcl_6SB8r``K`z={qiEU@B{N;&enkTtZpsQ!II5NX=CgYC! zuoud)55k@T!PB@eP+VPofx3Tg)#!%J!0&(=Wg?xFM#Z=}=nLDJubMyJb+cp^r*Fzt zjLIn~DM|m2$E0Ba9choo%%^nk+Q`m8He|9HP{ zJ=&)Aq?_8~3K_(;wJO-}KeU@8gX**O&4*+7eaYsdd6Kvc{aGe#-6A-j880%a%&`hJ zoNSefPDe?at=GT|MG75jX03&f*fR#*4qDh(mPrNB0=WSJgap{%AY?6jq8~ie)CLeC zQSyZ}zfN3N_R2<=>2mfeV&~Us8l(0_y>7DhFKVVr@&77McGrxz^9IQN5cx`w>jr@) zUfJAyiX5-4e_MfnnXec5_xcX=)2Z8mm{Y=$`{K3ZoTKL_?_Y6c>zfm6xW01tt8k30 z94Nwpp^#8!6M+SS0dy=^iC3pqWG9i7P1&tq-CumSaS+a7R-7EQm!0oMj2Q{MJxW+D~{+x#jbF>)a>%9E#=^_REi+hYIS$zpv@ z4p0*scQ4Yw5@J9cp||;nt@jpg&v3`*naJf%$hP1Zi(KYK&!a;RZlmZq2$+BjftR=t zC%6}v`TNjbiU(Ha)0dxxy$}mYRm2RFpw-~7?RhRjJ*#UP4eFv=s_9XtLw<4r22>=l zs}8bK-H4*hwq@5p%)p)wU$XRGLI5G)Elp>j1}J(Aq!2PyCaC838$NhllnB{PYCoFR zJF(_1t_zoEJZNorEg0J0z$i!O;SzxZ;df{Cs*e z_eQ;eVX9rlC8gZ=wHNT3`-YRQ*~4U7_Scbn{{=yyn%Up6-f?6; zOFuf{3wuhdp*tt&XD5@kK9KK#5175E-3)g984xDfHx-cUKO})xKVi&tln28daWY?n4k+aPPfX;6wS(Gk=Gg)qxdC z7|Gi=GB9$zErXoP($pA7pM|C6mn{ePImc{tpwo+-{rWeVea@_ISdk*ThJyNz8#XgP z4d$b`7N@-4duB#&IEI<r8D^wR=CPTUD`@ zZLCk(#b@#tD;;1~jQr|`XTFxbc!cBV;?ock2RO(D)(&5=Nt+!gV1slyM_ra;2h4Qr z6yx5}i@1$T2TLwhutUad-_Lw9{UlCFK=U8M8{GSvJ_$Jdd@^ zB5BI}6%CSKEgntgZO%wm1o@3HDXK6TXMLv z_o_Vja&_n=;6Iz(GbfLko?R#85Vopp>t;D!ZFI$`jQYtkwuT%JNT~HiA}xLv?Bdsx zBKGDe`^=*vWMO#{&>8vRM}zx&(5_o44+4w=A?8_>YKgD0x{o?+LN$?R{m?xeQk=`Kvn>bX^yR-sad7% z6Idi>nN@~L&RA4ejY%b$g&zq3&b+aycb02sx3gL>w}?IZ``FB~0k!f9+aX zz1NZeR8&-HX~@bXuoBT}Ze%6|0 zKc-3iqb0|x)zVTl6?K%r;)V%Tixods`M6EF2i=(X!1oc1|2<+zEU1$`F;ELwdEV| znT&48h5m`Vh{<(^Fz8qrhti|+jh}1sr>%aY3$!8SmYn0Ok zsu!%;*yDfUicb0uij?pFt9mvI{`#H`r8@@CQMF9&O4#&4%zIw_C;Qrlq>ikD(_QMU!YOBC6=yY{=g zyEz2~Pj(Lv$%dMXK&*xxbLiBBsh)e5+Q?$&lW6+(y+3BR^9!2#Mhg0R3MRB=lU4rw zL;lwMl6M`d-uJv}#bw+QOupy2^!dy&67lX!UfV*ANBjGEToq06roJZ%Vz)cFumLl8 z<#rPJ(^oRf4~HIh$1Ck_2h}q~%L9o5!`qnw86TQX6z6_gAUn1`T)LeNiRc-S#)R=6 zBaQ+P)KKoh-zjzlj*_9#l(mwMdau={FeLA9!prFz^6j3bU!@=A-JW1W1OLVM=c6z1 z$FO;uRwyIQoE}q!yb=G)-{&x`fRyVVjEURBot>--|BF($evZP?D!YlIoSdKx|699; z+uc$6a!Eij$6(DxhbXL^TBE{F*f*#f}efk&@ zs=<&C9^r9d|T|NIByS}0@SV+T=BWzRIyv?kG$m#A%?JIye;Jp z9gi}kdx5U89LSk!NNC{N0XnZ1NL#&~75^$uwnQS%wUsnP{PuPYVZ*PT3OSs5V;RpM zg{8K@FDmpL9S=ZPhm5A^DvI}77~4*o>u~k}PvfBARsiB|c}WhJRxA;I{6%`SNGEsP zGvI!me!}Cg`C~9H|L=WqK|%NXObIW6=CfgO$a-oRI+dSw{P!&r$PvQiX56R+57+I-MtjrMv3)Gvg;c^hbg6CiczI z&$lS>_fs9aIf{-`_$-i`?+zO?4k6=v6|EUHOWyCDXe?$b-wjAKF9jeTCYOeXc|KjR zmY`w-VV0BUZHXqe1+H52U!+>DUfEL!*e2j54vYQ0PMsmdwPV6VmM`QzqO-myX!^LWc)Ld4svK}LU=|6ED*_${&fXe1RvWwo=Ix63 zi)q8NmL78+leQ%#MdvuJ5xA}Rz@#dTxlQB!%W-axWexFtp!DC(n+7+IgWn@kRW6&V zPMY}A_k4b*37LbvKYedpZhMua)!GN)}pJRA|z#2>zC^_P5jwBEU?Gl49F^@^4|N-R=VNlDOQ<2y83iKym3;_tuK z&}-;-)$@~wSB2vGxUzqa8?DYjxD)xc1t?yHj13RdiP>$bo$t^mdx`~pTpCiWo-y^w zm%!UGm&f?6%(^w4t~O)hL0e{2JB$I8T?v+q-n@~6WZ|G^eAw!dQdFv(DJ}W2+BWq< za#3<}YF3tOZf-|(q=T0QcxF0V#R>kDWM-8GO`jz@3ldQ59L!1 zFrpst-7BlL9ZGqYhF9Z7M@_h!+4}d(b%mMIV$-(`$)ridikKWb{9W!*`6}YZPq4Mz-abM$>i zkM}g~=cJ#H8tp#3&o^4~PPHBi2(FbvC)=msx(%u|K#S=hlzEv!_Z$&IZo1=FbJTL@ zJrP)|lr8PF)Kqn|szCsL+l&-M@V1C5pi5Cu^B5qvsqFALurmaeaNz*u2|mp{tzEf5 zzfoCqLS0(pQC6(CdD+Bln(AZOE7EIUnQgnmNgJ}WBxyi%8jfoa1K~Bn_mUB(Oeu=r6PS9x8>077SFEr>CP0Ix9!K=JNTpWNz-iW;& zURi{I|CIBX0=buttVu;HykYy#Pvj?cSkg#EvDh2;?t3RydwA=`TY=(5ccH1pcZOFw zT?|WNzB?awTlS=Oy{~ob9cdKPYvJF-==~y7oZzS?<709o9v25RGShu*nQ6Li-;iWo z>5rPszbGStNj!G{U#Zz0&)b5jD4_44fDOAydXu0}1 ztUH{v{HC$nRqJn#yi^P=(IP5n(+1$(tFOA5cMIF{p!W$qka1jJM(xiNAADwn0`-ST z?H3(9ZkHVVe7j2Yer^E##C>Q(#?RZ)9)JozEeVO_xB&#|b(h2sZ|~*BJlCvBns#+} zz0Os3TTZN_!4wYE%m?iFc?uUw&+F}Jm1lpNS(2f)meyRhU6jH0G*mDV16kUg@Y*@z z83pLoth2>Fd@(ZF%zsu;4iy6x%3)cPzvnR@6^c)_v3cE#II&+#aM*XyKi(r;>brpj zY`K_>z7Sb(MoxF1v!kpUB<1!ON?jDE0h#9|4nSK7fL)dV```xD zXtr0DD?iqzjhr-wAU6D8!;9=t3{N3hTqXAjO%8hpuni6$oz0uHjHX}E23|ym!v1DO$|a`Q&%iTJ9{)QqYWO=BPo@gCnVyB7%$rNSJ$wS7 z_vDQRb=p7HCDy*%WSlImd{1QJGYzkU81Zyye5XFUnP&ta_`wj9X(%p zxLRJuF7D0z*#6a7_pTlNulPaZ{d^J;SOJ({Ohjq%8Ub|af_i6q@iMDh))>xbyLuA{ zm0~zHcFyVqo}Qan4JS#466RTa`lduMoVEx-EMt1abq}n#FhkXmIOkZAFd~Nz_N{@Z zeuKzqp0MrG?3=VOG6^t;&bkMViqr^B)v#hYM3+nj!WjRe#*U&M-DJU~X^ zh0+gw$WNt|bnaJz@e8K0PUD`mW1?;omt3nWI4@r?fzpaNhPv zOE&yW9ms+UZqIuR`3yy1!7-rx*~-2bQ-;ki3M>2$-lOo9Vn4&iq0#|_Y9_}^e=EBV zF*T$3TU#FvoR&UBZ~*5^XfV4mpRGJw0LmAG11eqQ6?bBUF#GkdXW`2Gts2NeMP9%c zU`As?^+Kd>J8VRy2~4|4A(!RFg_*dt3Q>Z1g}W6QGA4!o3EnTubEqoN>XN6W&-top zeORV^Z)NPIZc)5Tey96SPRqkPT^-t2cOKNtZgqDYk+h#iqD7z)C_|t=fzIL`R|}(DqX=;}_d)^jT#>9T9L2t9@Y=BKHwuu6x1I@ac@(HdXQ}D`l@mi?%Rb!z6-C zZ}Y)p^j7>ZFRJNG&tv+#etoB?z0?6t%G9DtZIx5r3NtS|(W*w=cIYBk@IC!i%Ze!j zO}vE^&v-7FP@FSw6w@22kEYD zDw@|eZ!O51XfMxJ36)~#(#Mnu^8Fv9cAuNy4GO@N=ow~>U1wYHIYg|jS%y#Z6K|~Q zBan5U<}r`PU;;oyQe=+|wt)p`OZ!zF!4CNFn!bNXcxirIr1O)JAd)3TSz7|MPJTS{o4nbW(7#$#EB1In>{z#^+ECV*?%(;v z+@g=}@*pml&i$_iauaJL76)3*gL5sjyXA_G+3Ldmq@LDA%}H#ku&}T<4CMnVG>+k! z?CRI!=!lq&qJ#WoJNPr{oHv)dyA1D83nj>#AIP}htY5)X|I^JU{rXZguB&GEi`02G z#5{yCSNV@@hICK&C6@#%4qAv8!A9@$$0Guq$BM=GC3kMTg3*{=>Mz=&`0X!Q$60$j zOv+1!0~tF4QFtk&?0>|Zl+gjQ96}Iwu=W%Cq3xqg#SXTNHZ@6|69(JPSA7b4VI-W2 z$CJvxhuV^g@TSCC6a5dlNW2!qNr=sZK9FxBkKtk(P&e5M@r2`dk?u?;5S2j7OJ8ha5c;$R9N0c2?&3?ZF@kh(7zh0R5N>h4&` z>l`%TmAdW*iNmJa%@wUwyp&*5oFZNcn*=xX?%`J*Y17%nK=-llo??R^jOooHB1=u! z**f)`n?x*Qe$uFlZJwX1m5OcU4#zB5(U)t*-9>zNi7U3bybRr^tA`=c%+;aNF84M{ z?mry=E!e*Km_Xy@Lv1O)Yp8CP`#}K4hW92+9WzSbhUhgB)ldo<1TeiSL++xa zZlT)B?o=B4MT5#IT3zxdLBrv$%s2Hc;5s9(QRvgK_CVTYQ+KUX?d^xYSgOR2;gg7@54wJJc>`a5 z#76_&5NwH%>eW)In$oh|^lNw6r?mB^k?z)l-1ND>$Bw#mdOwvf*5Zd%U#@sy*{$dP+SZ9(0-IxFcM~|YWmExDJ1l;x zwk&&dT6#1bv6lIs4Zo5oL+B-D1Kg^Qu`G*uSa0J;DJZ0sv55gcJ5#=h(X7sm#*O;U zYPNtU7~kPV*OFwV}zkNY>u~Jg$sJDp4~ZM&7X6ca{7H#%`V>!)%w0~8C9SR zqE6P2LSEyNdz^auN5P57P?ak?Vf5P%3$(e8XrPlwG9%^lEhslqYgfTB+zVFsD3rgn zQ}my;k=J>fFk-R0>UNk*BH4WvC9X@d+nkuJ1XzgcEvj^!ToRyt!`Blf2UbeJf0Sj~ zQJb1~cYIyR#Lb8~YT$b4)9*fZjV&v5l$gdU$cpN$uuINy%IUY!9$Bs=j(kCpdmNu1 zAxO~3PLY|<7m`vuxr&LXBAfi#F~Ki6^;F3%`hNdPltWpe9$YvKeG|;S`!@AaxBvav z)#1J?9jPl@-{`x}P44mc<3ImLW<>jS1UC4{IUcfKB%pq?mY3Y`t}uf*exqJv)~4`N zzr7~Kbxcd2Qs-LTOMNH5svPDpqurT#PbE{LZ5Zxyq717A0ORw&UVy30s5JJb0*NQ* zx^Fm4CLPTT-|r_RIDq41$;}O#HmlX32m*=MHStN+Z}6o%r>~MTly_hgHthMykACY~ zWD4Nks~_K@NDk0~gl{S#ZOe?A367)tcEN*u z9b}{3;GYrys5o)XbAvzQ{orTcfC+W;&?|LZ9;^rGAAuJIcAQ2I<(iny&c+SExmmg9 zbmJc8m6+y~aPjT*Ti(Z6D{5<~=8$CYPZIFtEP1^prHZ$QHWo=?MDd4{MRaam^`eQu zGph*YF5*s37S< zPI~!7{>NX8rjGX8d>8CzdEEC&$C~Ujymx6B=6SSvNMl-zH!6fJqdTZYv`B8A3p&15 zQb7Xzz!rehe5>S#x!&;p_x;-`OCg=Hvp-1<9<^_^NS$zn?kkSA=Am)Dx7TmakL-8q zCl_f>3hN#)MuWoE)TTRMTI<8veG4S$ngfYrcerAN9=SZBkjxWXW=swLhoXXW-R8}> zav?yl-BBOw$jtnY$sB%kxN}u|YbY{2WP=Ly!U7$hthLbZmv*X7_JLjnyuM(=B~acE z^UN~t2hKEMh={n>j+H=!a;A`b^jjGFHVN_F5Q-N>6d5xHR7d=F%52cO3 zpUHt)n((EbUc!WSnIcuepz;!4?y2SU)((HKi< zph(ifF5x9&(FjQt25WDe$z5{$zjly^^b8*ob((ks46}WVS<7Ck20oU5P|7`K>GnN9 z*S!Z{eF9DTYU7BLL^v~>7g-hmStc2Kw}hAaxsF%vX?|*1YSDKab`l=2@HFT9t;wYw zCztJqf_wV{og0=EP8nquYA`i5RX>Y19(-!jP5&WWxXERmj4p5hbt|Y62P&$EOde{(+!-oDKAjAeB0>dqu~h!WN=$pA zs3|>1=snp*qEVem`$aA}r(N0GqVE(3nWkdjTxXhGPxV&_`&XZpMwoe;Q)mCZE+pm8 zU?;ym?qH64ESz5>y#1eC*B>4pI_6^Fo^Euo8(&y3_k_-bWSntyq7Wn{B^_OypYJc@ z1Bw79uoCd3E;@h%9{5;JZ_Z_ZW*BO|7~?eMU^RQJIOddncI+rT^4pPi`RIWVB4&%G z1VwkHhh(YcNk10#2qC+nc(mTu@89p;h`rnPJ~6qhRe4#(G`{)D&6}s-vOO3bk(Hmn zIV}VnR0Ct-8&6Sn0Ti_eV+E3xoo!M0*qkDTiv*LiSy1|Q-|c3H&}II}I1+*b^Nfg! zZuJg8)YQ~?_;P5oA&x2_k%ctXXfjGAXfh-+glU|gOG`>VY+a#K#dJen(4cL}6<|~1 zP3rYBS)Z+p?1}gr04~t>W$m5sERu`@v`P$$y^8tRKBGk$^MvVzaW^UF4BuYZdj~=T zgCYmV{RjNFM~Ie@JC9?8KcFa-?vGG1z-mKw)i%ohi+eiG&{X$Ux+*7Ut)Zyn_eqzX zez{d+Jno79q+-Dc|HY7wbzyeH zQ=8;+zh^jAdKsk5o1drS6=r?C*@88Th-S3WKJ91tb z7PiJ|LJgK{0F-9OED)HQlK!!`QGO^}wH@spTLEb8Zo+Af-)iE_E}}^(IESmV8~#hi zre&$ZUzk3I7>yELZU$^2GB?Q)yXA%}YpCm2)GYyf6a9BD=y^cahY0QB*apcCdR%>d zAUYbI%$YSsVI0ZY^F9*BfR$WxSmPRQ-&R!KprHo1#?YCgoW-ze3d5L{2BnU`2i2ZxGjR_uv<2q>rDy1?!Jg|7uuC{$&~9wo9+xj^=!j}3g4&l9WA9{c%V ko4i^rk3-!5*CCvKY6*APhIB9Du|*N6C}_%;%b5rL54e#x@Bjb+ literal 0 HcmV?d00001 diff --git a/src/de/einfach/src/eu/kanade/tachiyomi/animeextension/de/einfach/Einfach.kt b/src/de/einfach/src/eu/kanade/tachiyomi/animeextension/de/einfach/Einfach.kt new file mode 100644 index 000000000..f86c3ef90 --- /dev/null +++ b/src/de/einfach/src/eu/kanade/tachiyomi/animeextension/de/einfach/Einfach.kt @@ -0,0 +1,310 @@ +package eu.kanade.tachiyomi.animeextension.de.einfach + +import android.app.Application +import android.util.Base64 +import androidx.preference.ListPreference +import androidx.preference.MultiSelectListPreference +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animeextension.de.einfach.extractors.MyStreamExtractor +import eu.kanade.tachiyomi.animeextension.de.einfach.extractors.UnpackerExtractor +import eu.kanade.tachiyomi.animeextension.de.einfach.extractors.VidozaExtractor +import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.AnimesPage +import eu.kanade.tachiyomi.animesource.model.SAnime +import eu.kanade.tachiyomi.animesource.model.SEpisode +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource +import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor +import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor +import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor +import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor +import eu.kanade.tachiyomi.lib.streamwishextractor.StreamWishExtractor +import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.asObservableSuccess +import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.runBlocking +import okhttp3.Response +import org.jsoup.Jsoup +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import rx.Observable +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import java.text.SimpleDateFormat +import java.util.Locale + +class Einfach : ConfigurableAnimeSource, ParsedAnimeHttpSource() { + + override val name = "Einfach" + + override val baseUrl = "https://einfach.to" + + override val lang = "de" + + override val supportsLatest = true + + private val preferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + + // ============================== Popular =============================== + // Actually the source doesn't provide a popular entries page, and the + // "sort by views" filter isn't working, so we'll use the latest series updates instead. + override fun popularAnimeRequest(page: Int) = GET("$baseUrl/series/page/$page") + + override fun popularAnimeSelector() = "article.box > div.bx > a.tip" + + override fun popularAnimeFromElement(element: Element) = SAnime.create().apply { + setUrlWithoutDomain(element.attr("href")) + title = element.attr("title") + thumbnail_url = element.selectFirst("img")?.run { + absUrl("data-lazy-src").ifEmpty { absUrl("src") } + } + } + + override fun popularAnimeNextPageSelector() = "div.pagination > a.next" + + // =============================== Latest =============================== + override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/filme/page/$page") + + override fun latestUpdatesSelector() = popularAnimeSelector() + + override fun latestUpdatesFromElement(element: Element) = popularAnimeFromElement(element) + + override fun latestUpdatesNextPageSelector() = popularAnimeNextPageSelector() + + // =============================== Search =============================== + override fun fetchSearchAnime(page: Int, query: String, filters: AnimeFilterList): Observable { + return if (query.startsWith(PREFIX_SEARCH)) { // URL intent handler + val path = query.removePrefix(PREFIX_SEARCH) + client.newCall(GET("$baseUrl/$path")) + .asObservableSuccess() + .map(::searchAnimeByPathParse) + } else { + super.fetchSearchAnime(page, query, filters) + } + } + + private fun searchAnimeByPathParse(response: Response): AnimesPage { + val details = animeDetailsParse(response.use { it.asJsoup() }) + return AnimesPage(listOf(details), false) + } + + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList) = + GET("$baseUrl/page/$page/?s=$query") + + override fun searchAnimeSelector() = popularAnimeSelector() + + override fun searchAnimeFromElement(element: Element) = popularAnimeFromElement(element) + + override fun searchAnimeNextPageSelector() = popularAnimeNextPageSelector() + + // =========================== Anime Details ============================ + override fun animeDetailsParse(document: Document) = SAnime.create().apply { + val info = document.selectFirst("article div > div.infl")!! + title = info.selectFirst("h1.entry-title")!!.text() + thumbnail_url = info.selectFirst("img")?.run { + absUrl("data-lazy-src").ifEmpty { absUrl("src") } + } + + artist = info.getInfo("Stars:") + genre = info.getInfo("Genre:") + author = info.getInfo("Network:") + status = parseStatus(info.getInfo("Status:").orEmpty()) + + description = info.selectFirst("div.entry-content > p")?.ownText() + } + + private fun Element.getInfo(label: String) = + selectFirst("li:has(b:contains($label)) > span.colspan")?.text()?.trim() + + private fun parseStatus(status: String) = when (status) { + "Ongoing" -> SAnime.ONGOING + else -> SAnime.COMPLETED + } + + // ============================== Episodes ============================== + override fun fetchEpisodeList(anime: SAnime): Observable> { + if (anime.url.contains("/filme/")) { + val episode = SEpisode.create().apply { + url = anime.url + name = "Movie - ${anime.title}" + episode_number = 1F + } + return Observable.just(listOf(episode)) + } + + return super.fetchEpisodeList(anime) + } + + override fun episodeListParse(response: Response) = + super.episodeListParse(response).reversed() + + override fun episodeListSelector() = "div.epsdlist > ul > li > a" + + override fun episodeFromElement(element: Element) = SEpisode.create().apply { + setUrlWithoutDomain(element.attr("href")) + val eplnum = element.selectFirst(".epl-num")?.text().orEmpty().trim() + episode_number = eplnum.substringAfterLast(" ").toFloatOrNull() ?: 1F + + name = eplnum.ifBlank { "S1 EP 1" } + " - " + element.selectFirst(".epl-title")?.text().orEmpty() + date_upload = element.selectFirst(".epl-date")?.text().orEmpty().toDate() + } + + // ============================ Video Links ============================= + override fun videoListParse(response: Response): List