package Ġcom . base . library . rx Ret rofit . download Ċ Ċ import Ġcom . base . library . rx Ret rofit . common . extension . bind IO To MainThread Ċ import Ġcom . base . library . rx Ret rofit . common . header . Down Head Interceptor Ċ import Ġcom . base . library . rx Ret rofit . common . retry . Retry Function Ċ import Ġcom . base . library . rx Ret rofit . common . utils . Down Record Utils Ċ import Ġcom . base . library . rx Ret rofit . common . utils . File Download Utils Ċ import Ġcom . base . library . rx Ret rofit . common . utils . FileUtils Ċ import Ġcom . base . library . rx Ret rofit . common . utils . Url Utils Ċ import Ġcom . base . library . rx Ret rofit . download . bean . Download Progress Ċ import Ġcom . base . library . rx Ret rofit . download . config . Down Config Ċ import Ġcom . base . library . rx Ret rofit . download . listener . Http Down Listener Ċ import Ġcom . base . library . rx Ret rofit . download . service . Http Down Service Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . adapter . rx java 2 . Rx Java 2 Call Adapter Factory Ċ Ċ /** Ċ Ġ* ĠDescription : Ċ Ġ* ĠHttp Down Manager ï¼Į çĶ¨æĿ¥ ä¸ĭè½½ ç½ĳç»ľ æĸĩä»¶ Ċ Ġ* Ċ Ġ* Ġ@ author Ġ ĠA lp in ist ĠWang Ċ Ġ* ĠDate : ĠĠĠĠ 2 0 1 9 - 0 4 - 2 6 Ċ Ġ*/ Ċ @ Suppress (" Check Result ", Ġ" unused ") Ċ object ĠHttp Down Manager Ġ{ ĊĊĠĠĠ Ġ// Ġ ä¸ĭè½½ çĽĳåĲ¬ åĻ¨ åĪĹè¡¨ ĊĠĠĠ Ġprivate Ġval Ġlisteners Ġ= ĠHashMap < Down Config , ĠHttp Down Listener >() ĊĠĠĠ Ġ// Ġ ä¸ĭè½½ ä»»åĬ¡ åĪĹè¡¨ ĊĠĠĠ Ġprivate Ġval Ġdownloading Dis pos ables Ġ= ĠHashMap < Down Config , ĠDis posable >() ĊĊĠĠĠ Ġfun Ġdown ( config : ĠDown Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( config . url . isEmpty ()) Ġthrow ĠThrowable (" download Ġurl Ġis Ġempty ") ĊĠĠĠĠĠĠĠ Ġ// Ġ éĺ² æŃ¢ å¤ļ æ¬¡ ä¸ĭè½½ åĲĮ ä¸Ģä¸ª æĸĩä»¶ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Downloading ( config )) Ġreturn ĊĠĠĠĠĠĠĠ Ġ// ĠåĪĽå»º ret rofit å¯¹è±¡ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor ( Down Head Interceptor ( config . headers )) ĊĠĠĠĠĠĠĠ Ġval Ġretrofit Ġ= ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( builder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Call Adapter Factory ( Rx Java 2 Call Adapter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( Url Utils . get BaseUrl ( config . url )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ// ĠæŁ¥è¯¢ è®°å½ķ çļĦ ä¸ĭè½½ è¿Ľ åº¦ ĊĠĠĠĠĠĠĠ Ġval Ġrange Ġ= ĠDown Record Utils . get Range ( config . url ) ĊĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= Ġretrofit . create ( Http Down Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. download (" bytes =$ range -", Ġconfig . url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. retry When ( Retry Function ( config . retry )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Download Utils . write Cache ( it , Ġconfig , Ġrange ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind IO To MainThread () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDown Record Utils . complete ( config . url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners [ config ]?. onError ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDown Record Utils . error ( config . url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners [ config ]?. onComplete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDown Record Utils . download ing ( config . url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners [ config ]?. on Subscribe ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġdownloading Dis pos ables [ config ] Ġ= Ġdis posable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpause ( config : ĠDown Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Downloading ( config )) Ġreturn ĊĠĠĠĠĠĠĠ Ġdownloading Dis pos ables [ config ]?. dispose () ĊĠĠĠĠĠĠĠ Ġlisteners [ config ]?. on Pause () ĊĠĠĠĠĠĠĠ ĠDown Record Utils . pause ( config . url ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete ( ĊĠĠĠĠĠĠĠ Ġconfig : ĠDown Config ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠObservable . just ( config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownloading Dis pos ables [ it ]?. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . delete ( it . save Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDown Record Utils . delete ( it . url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners [ config ]?. onDelete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners [ config ]?. onError ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Downloading ( config : ĠDown Config ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdownloading Dis pos ables [ config ] Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġdownloading Dis pos ables [ config ]?. is Disposed Ġ== Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠDown Record Utils . is Downloading ( config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Listener ( config : ĠDown Config ): ĠHttp Down Listener ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlisteners [ config ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbind Listener ( config : ĠDown Config , Ġlistener : ĠHttp Down Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( config . url . isEmpty ()) Ġthrow ĠThrowable (" download Ġurl Ġis Ġempty ") ĊĠĠĠĠĠĠĠ Ġlisteners [ config ] Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġun bind Listener ( config : ĠDown Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . remove ( config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Completed ( config : ĠDown Config ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDown Record Utils . is Completed ( config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Pause ( config : ĠDown Config ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDown Record Utils . is Pause ( config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Error ( config : ĠDown Config ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDown Record Utils . isError ( config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Progress ( config : ĠDown Config ): ĠDownload Progress Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDown Record Utils . get Progress ( config ) ĊĠĠĠ Ġ} Ċ Ċ }