From f48150168cd6704ffffa940055f6134d1992dbc6 Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Wed, 2 Aug 2023 03:40:32 -0300 Subject: [PATCH] feat(src/id): New source: NimeGami (#1991) --- src/id/nimegami/AndroidManifest.xml | 22 ++ src/id/nimegami/build.gradle | 19 ++ .../nimegami/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3623 bytes .../nimegami/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2005 bytes .../nimegami/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4632 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8049 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10248 bytes .../animeextension/id/nimegami/NimeGami.kt | 270 ++++++++++++++++++ .../id/nimegami/NimeGamiUrlActivity.kt | 41 +++ 9 files changed, 352 insertions(+) create mode 100644 src/id/nimegami/AndroidManifest.xml create mode 100644 src/id/nimegami/build.gradle create mode 100644 src/id/nimegami/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/id/nimegami/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/id/nimegami/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/id/nimegami/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/id/nimegami/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/id/nimegami/src/eu/kanade/tachiyomi/animeextension/id/nimegami/NimeGami.kt create mode 100644 src/id/nimegami/src/eu/kanade/tachiyomi/animeextension/id/nimegami/NimeGamiUrlActivity.kt diff --git a/src/id/nimegami/AndroidManifest.xml b/src/id/nimegami/AndroidManifest.xml new file mode 100644 index 000000000..dc72cdf93 --- /dev/null +++ b/src/id/nimegami/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + diff --git a/src/id/nimegami/build.gradle b/src/id/nimegami/build.gradle new file mode 100644 index 000000000..a81bb2375 --- /dev/null +++ b/src/id/nimegami/build.gradle @@ -0,0 +1,19 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.serialization) +} + +ext { + extName = 'NimeGami' + pkgNameSuffix = 'id.nimegami' + extClass = '.NimeGami' + extVersionCode = 1 +} + +dependencies { + implementation("dev.datlag.jsunpacker:jsunpacker:1.0.1") + implementation(project(":lib-synchrony")) +} + +apply from: "$rootDir/common.gradle" diff --git a/src/id/nimegami/res/mipmap-hdpi/ic_launcher.png b/src/id/nimegami/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..591180bcfaae6a88ebd74d60c1bd7ae73d1bc0e3 GIT binary patch literal 3623 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 literal 0 HcmV?d00001 diff --git a/src/id/nimegami/res/mipmap-mdpi/ic_launcher.png b/src/id/nimegami/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..80325dbe3e64437da53ffc180297cef1cd367dc3 GIT binary patch literal 2005 zcmV;`2P*i9P)wF zQKN#5#x^$IR^wgc8SB-e^#Cg(h`1cOSKs@Uwd*=N$L_Yo#7!m(GdsU|pZ9&&%;@lz ze{^rT{dfn^&4B6dD@3)M~Yka5|k$_(b{^=X-v; z7WH=ApZ$EUPN#bs5)!iQ*|TRkWo2a+PY5Z1U;4j~0#N=Zp6vD@utCGRR74}{^aHS~IYMR|F70$uYp6+8j>|0ZqPv?=#yoO>Ak z7XWh5m6eszbj=F)eDDO|q>UngGS@<$2D|T9$_;m80-**0G^1;>b2+KSM-m`0F|o|k zyHcK)0|sh))33pDckb{yl{MmSX?G1Vi!gq;9%Rb?=3oC`RpGBD1=U)JShMsPo9jz!a_twMqU0oe^?AU?g;$qOmD~x6b zFtAcCXa*1pj9ki@iALLVV2f*u>Wn-wfw&Ynb?THbVA7;XLIJbcjDZ6OB0D=<65#gj z+am0iELnp5{Csrj(nY{LdGbUtgj55xXwl+d1?mBe+vW)m)%KqVYu9vy?)_FMzyMr@ zTp=U}z_Gq>-#!60e*AdU)YO1(Rxo|~bdf(wRZKGgD`1aqEpFz5%I}K{IH)H$q7$Hd z`WJLH&qOj-S6Aci-MgUs2$8rqZrnh#X3apw0GBUchQVM!$BrFE0#i2?p5~;Ei;Kg( zd-ueq)F=4bssSiw-{{0rW3)Xs1=f@v0xXysT~O&A$vz+z+e-1iaN$Cfl$2oY+O=YR z%>YVs(2JfQ;YHdg=qgL$)al_g#~_rNTL_g}rBIMF-gS&ajXV6bX?z!{5ukbV=CaeM zgN%JXZY_d;KZEd}IH@6$-9b$*;`=P20_73X)6+!{;Bv`f!XIvY*RNkkQc@CPVq&m+ z_ij<8xPNdl;GE*mkRd}vjvPLG*f#(<1+49Rqju?ypNZsO`?%;C!R220+uaX zCi(>@bkn9yMF*cdcP`efS%V7~F8Bu^t3YaB>c+DW{=*jtzIO$6X_>Gkc7cNiJyZV2 zh>dK7b?erN3RO{20lLS=oH=u_VZ#Oiuw}~@%$zwBIXO9)J$tsOMhtN6+BM|n=3?c_ zmHq+5#>UDjU~du+OZI9Qt{p}A&-udpwds@avg-gu5J2wCsiL;?JVaex40;T(e*JpU zuoz&*j2XgM2B7PSp)X(n6pM;CG_@a$g|){}=&5w->MXFe=s@4kVOsquvd3hJPRr9M zhX;4t`Sa&v)v8qjVDsk9LV^DcKq{R0L8C3X2dqimsR@KY|M*WD?hXqW9;ru<9*u6@ zx{3Jj)TxuGFs>nv|K{nFr_b7;Q+ZQV z;MJ=1huqT(rRPiDa?O2x%~i+~KvIGFhrMb*lpv&x^$UO!%4Y@m!fFiG;(5&qxC1DS z6lxTZgHr2#{+;S!j%u=`0%~E@=7bjGeFji#w5OK?<#l&R)e1yKMFmU&DKM>`*OCML zOoZ%@xnA&g(u;IcCdSkSO z?);{5E_0!C*(UXhDU=SjqIXh@2;xHq^5zvaD)<^MZs%3mY_>i01Y;rXE2gc^eN8C< z-e;t(F>NN=f@$M7Hx2P&Pg`l@_hOZ_)wp|~4f6J$nD?{chI->0>Ww}FaJ(}Fzny&J nU2#Jh7BDs60R+sIJ}&e(@yXkZ-^t7)00000NkvXXu0mjfOD@Ib literal 0 HcmV?d00001 diff --git a/src/id/nimegami/res/mipmap-xhdpi/ic_launcher.png b/src/id/nimegami/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..00bfa0a6edd1403bb8896f5cdef7df6d76e8ac1a GIT binary patch literal 4632 zcmV+z66fuSP)w>7epopNTuq+-30*0&M0iqbX3KD`KEV^?kb0?@KpqhXiX1=<#wW z|J$N89PkqO4mglk{>M$jDa%%6&#}Z-;LEvg_$~iylVJxm0ep6Lc1DX9Ert{n6x?1~ zTH4Cv@nrJhgN^@hMCzoGg*cfuR9UKes_KDwm&=uxl$4Z{k&&@r_wL>EfBp5>d@m6o zLm6}l0Ql~%UAtzNmzOU+apFWP2457eYJ^?zRq1s=v9{U{0d~svPn(#SNcHR2-_FcfX;5q;xB?&qNAWdSUMvZFnvEk&&lb7i>Pz7e7?qLT6o${^aMN+nI-g@=wZ997O zX!p~nPv?0_2&s;A2yk;jDOX;340*b1BPL`dXp1$eOp+mj- zo&|iAKvM@JK}7&`e=;AL&6_vh&-y<-P(yUDsR(cqgjfO|z#g1oZPA?TkjqCgA3<$_ ziU6U0_{ieX&*5MIhGU4Mt^cD*rcT+XPMvDRZ9KzAVJJ1ELqHlAP_tRHW}2zaBF*zo(X8;CEzUoH-?M>f{K7d&Laspr~)lq@S_c&s{C*O_6J=4mSr&k z7x1-Hd^k@)B&tY9id2Ba63}q(v;I5!ashX9?SDwgtk^yop~fB!x0-MiO^M<;ASJbFLs9Ww%o+xDcAORf^Y zCH#7b($@S(oLj*wy|5h>b?R%RIkult*Ud43o-=0-U3=}dR9sw4x88ayefi~=mGbNA z{b+z~w@lgYm=RFeZ7>zL|CRPT?O1far&-G)$chYA%WT3=p9 z8S@^ZgkScX5@01Dec=;kC!aQL8eM($)#CTakt6BTPd^psLxv2YF=NJv^O-YeQb|dP z_+6(?9pbfVTCiXNjT<+P+O};gR9ENDov}%Zcux+E9Xpmj`|L9xK|)=5HZRH;Fkk?I z1YBFUZXLb&;)}F-^Jb;w*&!%u65wA6D*>+4$Hl*Ijqf>eZ{wI6Gh?lYe^032551X~21a zm4M_e?@?*P7F5=>jc7>PM^h;&XPsdKqzcj`VEFLiq9-Gu$IqKLk9O?XA;`M%#v4tb zcoP)8{PN2JfKj7HnFf8rgbDP@E7+Q2gbf=uP|KDr#rX#xd_W(4^bxgg-J0&X=N@vq z-E`#05o+JQJrxyUE020BrHY`K5+H2=2uR9VOZkIe;_;@NTm`2n^YxKba&gBB8(<*- zjlihKUjlF)5+Dg!ym+yxj-cni`Q{rT5eR+z_N7gmHi`2QBSr|dgfMH?EPC?ECj~J# z+;9V7xQnoT`*tzxl>mag+itr}#9=T1a#Y}|;!##i2&k|DeMAF50E};8x4#R!fKgHM zS1ZVU^gAZN(C2P10kRSP1gu%JMx?V6FnjiFQyn1=`kE((B3-9Wo#?;;Y{ew%*RP-1 z>lZCrBqRdi;fEg<2g1^&OHDHH8|2(~-+dx({P^)Sefo59ZVf8H1I4r2bao~zRZw6X z;7fqVokY3!%py-lEtchSO8(ymJXiRuNr2S|TM4-1jyrs8fRq3o0#GjyFk{9HaUUxI z&ph)C-Fxr7m4NlXFlo{xdj9$6ZGn%(F(IHylO`c-Km`FQ>*t9Elw912&ffGGPYl>_ zvJU4lqNpg0bH<{IQIK5%P{x)mTYMy7|9)e%6^wwVpMIKPQxM?p*tc(=IQIt*MtaGT zCAJ6%CLNATKqvx=I#?vYO8{Dt-)|h1Ww-Zfs4f8jOzLwf0kW}n33%|q2gOho;mtSS zB>c7l2fG48AC9UCrmmt+fUIm`cj)`T1eDioK)J(MCAhG~)Cg7rPzC^zMp&vKX@so= zV3sU{T>>!r!H`t~4P%Q@5CV)jq!6Pl*asQ>$p|Ddp$Ll#0f8zNi~yOosLO3s)OCOl z0qF}Xz_b!DXwV=Z8{h;1vL4XynA}Mq`5_b0>uc7mY0io}bm&05t2v;0Qb~tDL5>s9 zxN+maHo#8;Qr6A&)uB8b%^Nn8JT>c!>tZ5inF%{Z006q>mRo#`@B|4K7BtDdF&Ulz3>DPvh{TtbQ{pZTbgs z-Ier)&d;uy>TJ)RJ+yZ1TA#Wg4b)NZ-n}U^GgIW@XSzfg_#X&J9YO+WhNu$|=%$sB z573*eX+o8uql0BxI%##%=zy)8#&H7p`7m2ck}85K;@Ml2$PeN0tj$$c9MFpytY_-> zSY6O`NP-s?&O8i#;m8Zt&bSev3w&9F=2U!nZz^fSjySJQ_LP-U($}jfdFRLEK4Og3 zqXB-ngrIGhCrDSuBab{nufFlZ6g0<_~wQGwC!%hC^qmRa(03E=C_1@xkJ*lwQ2orqDKTS!y))U+p zC71n?C^gedN;zfB8BOkEhD-Tek%nuoxkh+jF`LFH>!+UrJ~-sO1e|~V`4QUyPhtw? zj$~IwO1kLv06ulaWO8{$z{3-^f;%QsX`@R7-ihCQM(NA`6;tr-NJGG`@4e`_3eq7! zB^gERAua4N%&1~%G1ZuU7rBb?WPe2{Vb?`L|MA9!!hFh_!m5gcEITzdRV<$L>C;E7 zaA9Q&-cY!aUwiE}!kFG#kN4htPx$*W>AL;)+v%Z)9umV)exO?9Lmmu6`6*E0uE3fA zmOXdv+C?wC@B)4Q`R6|6!D9*!ECTXj9up|Ui~tqrR@HI#FT<(iitELtq}>}R?Z1;M z^=^+lnM$*-@Lu;&;=ZqVB7sM3*|p7+srTQ1pDw@r@_>!Td;#FfbzvmJLJLSjz;Y!P zVXOi5$HEQV6LO6~#+Q|qiFw7gZQIN&@Umj=f`EzLv(G*odjfPpxAt6|=d*e#Yizvf zK&&0CogH)-=bsn9;VK?Fbg0PBPomTE<;w*r01s=$s23Juq#N6x07wA{Q%^lbt5&TN=K$!r=bjVi*w`g|D8R&$ zrIY}8Sh2c>fHYXxm+Q>^`}e1hKmJ(64I4I$;5$P2_S^e*p^GYBZJQJ3;Y7)ypeLsI^cIrATsaORjd&Ud^DpALHJz<~pWzLtP> z>C(lNEGq%sx^)vvk_eET!-o%>1n?tRSVk0aS6y`#efZ&r;vA!#Hf`FN<(+c`s6ZF3 z@P@o0Q`m2mZ2+)&DXSm@bV)#^`GA)I*Xg5X8PLh2M~@c1B7lz`EDuQl0F)sd0$^mN zbiq4{9ThUfod7$48$G(B*J53`r0t(YTavb~p|lUDh;wXXDbK89kWsfO6%3eQv{w)? zl(5|e0ZzCnQ>K`HeK_2(!UboZG|W&Lkr06T!U=fJ5zwGPgNSWFQI~;K^rt}vxP^H< z3?0mCm&P^_8Q?k1A3Du=y$A@HF;u7^s0@r^u&)Oo!5G7!B49t!OE2+G3=X;k@LR6L z2ua!is33l*LX=Tu2~bH#IWN-Z4S!wCdJ)7(=#$rd324}ypsGv>@DjkT5OX+)y*s=< zVdldqX!7LAl?Xt6jvYH@8ewSza23JC-iU;0P#)G~HUTO|NJAH5qr7Uf_&Atq694Pe*_0Id=r>*h~@9Me}h0{DGs zwp5S=-=8G78_xE9luBE6G5HDhHlw7iD=BRyt0S)+f#>n&n{Tej=e=&-vWUeQsFOeh zfGq1Ms7gtIT>?T%2lryQp^L8UM`d+*HO#u_v$TZVhjvrS#zo}*@oOI;f-fH9b1Xfg z2O|JPEGJH#I#sOgB48K_X_4`A9)SI#Rsygk-f9D|2UQy3l`B_@{1^pc7%IcUg$vDj z0O}&=AO6zrxGO?MfE{&YO$)VCUYA|xY!_VlrzqhB3mU7VU;%k+)v6_ip?P_Ev~}xN zg3CY>f_&IXjae^(^*Uy|^4`)8NCIG2WE`%^d~%j7>jN_3TSCC5UferSh&lmw01u{) z{41_1Gg!P6*H!lp+9QHQI8Fe24;`@qp?bEHadt>?8ho@Pt_0{dNR=*Bd^mA|@~G-y zx97|BF(<%ILv+$Q1uy`yBMspK9(5yZRY5uc25N{-zHopK2V|YPL_&t+5>U5p-MHC+ zPynBc;77#<*df49?^30Wl|)3++hZ~e4Ml(oM7zVyaC>|>(%>}kQ8U7l0J~u8&H;4O zg(DH+);SV#9Jc|y=4#sp*lD;bZ8*TIBqPS^yJcgJm@S|dcgGqo2 zplA$7RXsbLI_ZFFCynD0!22O>s~~HIbwN?33s)7{0ndrF=L7*NFzpbeDoYjb1gLh( zaEbu+7@F2CQNrDpn@= zq7HcRumN^@YBbXFdcqD~U&bd)u+a#M8)3ga9Z$1ik6sqZ zX*8-7wIsYy^BjL?Z5rPIpD>B&3mWnpG8tS@1AZ`WIj;uc+bGIl7bKnZI%$*@i*f>9 ziQB^~bvN;Cj`M*}Sw-{>8SxD literal 0 HcmV?d00001 diff --git a/src/id/nimegami/res/mipmap-xxhdpi/ic_launcher.png b/src/id/nimegami/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..960f27134a9917030dd6f8f487fd202077f2e900 GIT binary patch literal 8049 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 BJiq_| literal 0 HcmV?d00001 diff --git a/src/id/nimegami/src/eu/kanade/tachiyomi/animeextension/id/nimegami/NimeGami.kt b/src/id/nimegami/src/eu/kanade/tachiyomi/animeextension/id/nimegami/NimeGami.kt new file mode 100644 index 000000000..1621e0265 --- /dev/null +++ b/src/id/nimegami/src/eu/kanade/tachiyomi/animeextension/id/nimegami/NimeGami.kt @@ -0,0 +1,270 @@ +package eu.kanade.tachiyomi.animeextension.id.nimegami + +import android.util.Base64 +import dev.datlag.jsunpacker.JsUnpacker +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.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 kotlinx.serialization.Serializable +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import okhttp3.Response +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import rx.Observable +import uy.kohesive.injekt.injectLazy +import eu.kanade.tachiyomi.lib.synchrony.Deobfuscator as Synchrony + +class NimeGami : ParsedAnimeHttpSource() { + + override val name = "NimeGami" + + override val baseUrl = "https://nimegami.id" + + override val lang = "id" + + override val supportsLatest = true + + private val json: Json by injectLazy() + + // ============================== Popular =============================== + override fun popularAnimeRequest(page: Int) = GET(baseUrl) + + override fun popularAnimeSelector() = "div.wrapper-2-a > article > a" + + override fun popularAnimeFromElement(element: Element) = SAnime.create().apply { + setUrlWithoutDomain(element.attr("href")) + thumbnail_url = element.selectFirst("img")!!.attr("data-lazy-src") + title = element.selectFirst("div.title-post2")!!.text() + } + + override fun popularAnimeNextPageSelector() = null + + // =============================== Latest =============================== + override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/page/$page") + + override fun latestUpdatesSelector() = "div.post article" + + override fun latestUpdatesFromElement(element: Element) = SAnime.create().apply { + element.selectFirst("h2 > a")!!.let { + setUrlWithoutDomain(it.attr("href")) + title = it.text() + } + thumbnail_url = element.selectFirst("img")!!.attr("srcset").substringBefore(" ") + } + + override fun latestUpdatesNextPageSelector() = "ul.pagination > li > a:contains(Next)" + + // =============================== Search =============================== + override fun fetchSearchAnime(page: Int, query: String, filters: AnimeFilterList): Observable { + return if (query.startsWith(PREFIX_SEARCH)) { // URL intent handler + val id = query.removePrefix(PREFIX_SEARCH) + client.newCall(GET("$baseUrl/$id")) + .asObservableSuccess() + .map(::searchAnimeByIdParse) + } else { + super.fetchSearchAnime(page, query, filters) + } + } + + private fun searchAnimeByIdParse(response: Response): AnimesPage { + val details = animeDetailsParse(response.asJsoup()) + return AnimesPage(listOf(details), false) + } + + // TODO: Add support for search filters + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList) = + GET("$baseUrl/page/$page/?s=$query&post_type=post") + + override fun searchAnimeSelector() = "div.archive > div > article" + + override fun searchAnimeFromElement(element: Element) = latestUpdatesFromElement(element) + + override fun searchAnimeNextPageSelector() = latestUpdatesNextPageSelector() + + // =========================== Anime Details ============================ + override fun animeDetailsParse(document: Document) = SAnime.create().apply { + setUrlWithoutDomain(document.location()) + thumbnail_url = document.selectFirst("div.coverthumbnail img")!!.attr("src") + val infosDiv = document.selectFirst("div.info2 > table > tbody")!! + title = infosDiv.getInfo("Judul:") + ?: document.selectFirst("h2[itemprop=name]")!!.text() + genre = infosDiv.getInfo("Kategori") + artist = infosDiv.getInfo("Studio") + status = with(document.selectFirst("h1.title")?.text().orEmpty()) { + when { + contains("(On-Going)") -> SAnime.ONGOING + contains("(End)") || contains("(Movie)") -> SAnime.COMPLETED + else -> SAnime.UNKNOWN + } + } + + description = buildString { + document.select("div#Sinopsis p").eachText().forEach { + append("$it\n") + } + + val nonNeeded = listOf("Judul:", "Kategori", "Studio") + infosDiv.select("tr") + .eachText() + .filterNot(nonNeeded::contains) + .forEach { append("\n$it") } + } + } + + private fun Element.getInfo(info: String) = + selectFirst("tr:has(td.tablex:contains($info))")?.text()?.substringAfter(": ") + + // ============================== Episodes ============================== + override fun episodeListParse(response: Response) = super.episodeListParse(response).reversed() + + override fun episodeListSelector() = "div.list_eps_stream > li.select-eps" + + override fun episodeFromElement(element: Element) = SEpisode.create().apply { + val num = element.attr("id").substringAfterLast("_") + episode_number = num.toFloatOrNull() ?: 1F + name = "Episode $num" + url = element.attr("data") + } + + // ============================ Video Links ============================= + override fun fetchVideoList(episode: SEpisode): Observable> { + val qualities = json.decodeFromString>(episode.url.b64Decode()) + val episodeIndex = episode.episode_number.toInt() - 1 + var usedBunga = false // to prevent repeating the same request to bunga.nimegami + return qualities.flatMap { + val quality = it.format + it.url.mapNotNull { url -> + if (url.contains("bunga.nimegami")) { + if (usedBunga) { + return@mapNotNull null + } else usedBunga = true + } + runCatching { + extractVideos(url, quality, episodeIndex) + }.getOrElse { emptyList() } + }.flatten() + }.let { Observable.just(it) } + } + + private fun extractVideos(url: String, quality: String, episodeIndex: Int): List