package Ġeu . kan ade . t ach iy omi . ui . player Ċ Ċ import Ġeu . kan ade . t ach iy omi . anime source . An ime Source Ċ import Ġeu . kan ade . t ach iy omi . anime source . Local An ime Source Ċ import Ġeu . kan ade . t ach iy omi . anime source . model . Video Ċ import Ġeu . kan ade . t ach iy omi . anime source . online . An ime Http Source Ċ import Ġeu . kan ade . t ach iy omi . anime source . online . fetch Url From Video Ċ import Ġeu . kan ade . t ach iy omi . data . database . models . An ime Ċ import Ġeu . kan ade . t ach iy omi . data . database . models . Episode Ċ import Ġeu . kan ade . t ach iy omi . data . download . An ime Download Manager Ċ import Ġeu . kan ade . t ach iy omi . util . lang . await Single Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġrx . Observable Ċ import Ġu y . ko hes ive . in jekt . In jekt Ċ import Ġu y . ko hes ive . in jekt . api . get Ċ Ċ class ĠEp isode Loader Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Links ( episode : ĠEp isode , Ġan ime : ĠAn ime , Ġsource : ĠAn ime Source ): ĠObservable < List < Video >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdownload Manager : ĠAn ime Download Manager Ġ= ĠIn jekt . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Downloaded Ġ= Ġdownload Manager . is Episode Downloaded ( episode , Ġan ime , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Downloaded Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdownloaded ( episode , Ġan ime , Ġsource , Ġdownload Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ ĠlistOf ( it ) Ġ} Ġ?: ĠObservable . just ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġis ĠAn ime Http Source Ġ-> Ġnot Downloaded ( episode , Ġsource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠObservable . just ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġis ĠLocal An ime Source Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlocal ( episode , Ġsource ) Ġ?: ĠObservable . just ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" source Ġnot Ġsupported ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( source Ġis ĠAn ime Http Source ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Downloaded ( episode : ĠEp isode , Ġan ime : ĠAn ime ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdownload Manager : ĠAn ime Download Manager Ġ= ĠIn jekt . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdownload Manager . is Episode Downloaded ( episode , Ġan ime , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Link ( episode : ĠEp isode , Ġan ime : ĠAn ime , Ġsource : ĠAn ime Source ): ĠObservable < Video >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdownload Manager : ĠAn ime Download Manager Ġ= ĠIn jekt . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Downloaded Ġ= Ġdownload Manager . is Episode Downloaded ( episode , Ġan ime , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Downloaded Ġ-> Ġdownloaded ( episode , Ġan ime , Ġsource , Ġdownload Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġis ĠAn ime Http Source Ġ-> Ġnot Downloaded ( episode , Ġsource )?. map Ġ{ Ġit . first () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġis ĠLocal An ime Source Ġ-> Ġlocal ( episode , Ġsource )?. map Ġ{ Ġit . first () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" source Ġnot Ġsupported ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġnot Downloaded ( episode : ĠEp isode , Ġsource : ĠAn ime Http Source ): ĠObservable < List < Video >> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . fetch Video List ( episode ). map Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew List Ġ= Ġmutable ListOf < Video >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( it Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew List . add ( run Blocking Ġ{ Ġsource . fetch Url From Video ( it ). await Single () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdownloaded ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġepisode : ĠEp isode , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġan ime : ĠAn ime , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource : ĠAn ime Source , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Manager : ĠAn ime Download Manager ĊĠĠĠĠĠĠĠ Ġ): ĠObservable < Video >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Manager . build Video ( source , Ġan ime , Ġepisode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġlocal ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġepisode : ĠEp isode , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource : ĠLocal An ime Source ĊĠĠĠĠĠĠĠ Ġ): ĠObservable < List < Video >> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . fetch Video List ( episode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ