/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠDr ake , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . dr ake . net . scope Ċ Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġcom . dr ake . net . Net Ċ import Ġcom . dr ake . net . Net Config Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlin . coroutines . Empty Coroutine Context ĊĊ Ċ /** Ċ Ġ* Ġ èĩªåĬ¨ æĺ¾ç¤º ç½ĳç»ľ éĶĻè¯¯ ä¿¡æģ¯ åįı ç¨ĭ ä½ľçĶ¨ åŁŁ Ċ Ġ*/ Ċ @ Suppress (" unused ", Ġ" Member Visibility Can Be Private ", Ġ" NAME _ SH ADO WING ") Ċ open Ġclass ĠNet Coroutine Scope ( ĊĠĠĠ Ġlifecycle Owner : ĠLifecycle Owner ? Ġ= Ġnull , ĊĠĠĠ Ġlife Event : ĠLifecycle . Event Ġ= ĠLifecycle . Event . ON _ DESTROY , ĊĠĠĠ Ġdispatcher : ĠCor outine Dispatcher Ġ= ĠDispatch ers . Main Ċ ) Ġ: ĠAndroid Scope ( lifecycle Owner , Ġlife Event , Ġdispatcher ) Ġ{ ĊĊĠĠĠ Ġprotected Ġvar Ġis Read Cache Ġ= Ġtrue ĊĠĠĠ Ġprotected Ġvar Ġpreview : Ġ( suspend ĠCor outine Scope . () Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġprotected Ġvar Ġis Cache Suc ceed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( preview Ġ!= Ġnull ) Ġfield Ġelse Ġfalse ĊĊĠĠĠ Ġprotected Ġvar Ġerror Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( is Cache Suc ceed ) Ġfield Ġelse Ġtrue ĊĊĠĠĠ Ġvar Ġanimate : ĠBoolean Ġ= Ġfalse ĊĊĊĠĠĠ Ġoverride Ġfun Ġlaunch ( block : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit ): ĠNet Coroutine Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch ( Empty Coroutine Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preview Ġ!= Ġnull Ġ&& Ġis Read Cache ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupervisor Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Cache Suc ceed Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview ?. invoke ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Cache ( is Cache Suc ceed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠ Ġ}. invoke On Completion Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinally ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġstart () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¯»åıĸ ç¼ĵåŃĺ åĽŀè°ĥ ĊĠĠĠĠ Ġ* Ġ@ param Ġsucceed Ġ ç¼ĵåŃĺ æĺ¯åĲ¦ æĪĲåĬŁ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġread Cache ( suc ceed : ĠBoolean ) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Error ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ ĠNet Config . error Handler . onError ( e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcatch ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcatch ?. invoke ( this @ Net Coroutine Scope , Ġe ) Ġ?: Ġif Ġ( error ) Ġhandle Error ( e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ" é¢Ħ è§Ī " ä½ľçĶ¨ åŁŁ ĊĠĠĠĠ Ġ* Ġ è¯¥ åĩ½æķ° ä¸ĢèĪ¬ çĶ¨äºİ ç¼ĵåŃĺ è¯»åıĸ , Ġåıª åľ¨ ç¬¬ ä¸Ģæ¬¡ åĲ¯åĬ¨ ä½ľçĶ¨ åŁŁ æĹ¶ åĽŀè°ĥ ĊĠĠĠĠ Ġ* Ġ è¯¥ åĩ½æķ° åľ¨ ä½ľçĶ¨ åŁŁ [ Net Coroutine Scope . launch ] ä¹ĭåīį æī§è¡Į ĊĠĠĠĠ Ġ* Ġåĩ½æķ° åĨħéĥ¨ æīĢæľīçļĦ å¼Ĥå¸¸ éĥ½ ä¸įä¼ļ è¢« æĬĽ åĩº , Ġ ä¹Ł ä¸įä¼ļ ç»Ī æŃ¢ ä½ľçĶ¨ åŁŁ æī§è¡Į ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġignore Ġæĺ¯åĲ¦ åľ¨ ç¼ĵåŃĺ è¯»åıĸ æĪĲåĬŁ ä½Ĩ ç½ĳç»ľ è¯·æ±Ĥ éĶĻè¯¯ æĹ¶ åĲ Ĳ åı¸ éĶĻè¯¯ ä¿¡æģ¯ ĊĠĠĠĠ Ġ* Ġ@ param Ġanimate Ġæĺ¯åĲ¦ åľ¨ ç¼ĵåŃĺ æĪĲåĬŁ åĲİ ä¾Ŀ çĦ¶ æĺ¾ç¤º åĬłè½½ åĬ¨çĶ» ĊĠĠĠĠ Ġ* Ġ@ param Ġblock Ġ è¯¥ ä½ľçĶ¨ åŁŁ åĨħ çļĦæīĢæľī å¼Ĥå¸¸ éĥ½ ç®Ĺ ç¼ĵåŃĺ è¯»åıĸ å¤±è´¥ , Ġ ä¸įä¼ļ åĲ Ĳ åı¸ åĴĮ æīĵåį° ä»»ä½ķ éĶĻè¯¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpreview ( ĊĠĠĠĠĠĠĠ Ġignore : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġanimate : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġblock : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit ĊĠĠĠ Ġ): ĠAndroid Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . animate Ġ= Ġanimate ĊĠĠĠĠĠĠĠ Ġthis . error Ġ= Ġignore ĊĠĠĠĠĠĠĠ Ġthis . preview Ġ= Ġblock ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcancel ( cause : ĠC ancellation Exception ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠNet . cancel Group ( scope Group ) ĊĠĠĠĠĠĠĠ Ġsuper . cancel ( cause ) ĊĠĠĠ Ġ} Ċ }