package Ġcom . babel . mar vel . data . repository Ċ Ċ import Ġcom . babel . mar vel . domain . Constants . Companion . CACHE _ ERROR _ TIMEOUT Ċ import Ġcom . babel . mar vel . domain . Constants . Companion . CACHE _ TIMEOUT Ċ import Ġcom . babel . mar vel . domain . Constants . Companion . NETWORK _ ERROR Ċ import Ġcom . babel . mar vel . domain . Constants . Companion . NETWORK _ ERROR _ TIMEOUT Ċ import Ġcom . babel . mar vel . domain . Constants . Companion . NETWORK _ TIMEOUT Ċ import Ġcom . babel . mar vel . domain . Constants . Companion . UNKNOWN _ ERROR Ċ import Ġcom . babel . mar vel . domain . data state . Data State Ċ import Ġcom . babel . mar vel . domain . data state . MessageType Ċ import Ġcom . babel . mar vel . domain . data state . State Message Ċ import Ġcom . babel . mar vel . domain . data state . UI ComponentType Ċ import Ġjava . io . IOException Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . emit All Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġretrofit 2 . HttpException Ċ Ċ abstract Ġclass ĠNetwork Bound Resource < Network Obj , ĠCache Obj , ĠView State >( ĊĠĠĠ Ġprivate Ġval Ġdispatcher : ĠCor outine Dispatcher , ĊĠĠĠ Ġprivate Ġval Ġapi Call : Ġ( suspend Ġ() Ġ-> ĠNetwork Obj ? )? Ġ= Ġnull , ĊĠĠĠ Ġval Ġcache Call : Ġ( suspend Ġ() Ġ-> ĠCache Obj ? )? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġval Ġresult : ĠFlow < Data State < ViewState >> Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠ Ġemit ( Data State . LOADING ( isLoading Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠ Ġcache Call ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit All ( safe Cache Call ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapi Call ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit All ( safe APIC all ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġemit ( Data State . LOADING < ViewState >( isLoading Ġ= Ġfalse )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsafe APIC all () Ġ= Ġflow < Data State < ViewState >> Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . run Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Timeout ( NETWORK _ TIMEOUT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġapi Call ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Cache ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Network Success ( result )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġemit ( build Dialog Error ( UNKNOWN _ ERROR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTimeout Cancellation Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( build Dialog Error ( NETWORK _ ERROR _ TIMEOUT )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIOException Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( build Dialog Error ( NETWORK _ ERROR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( build Dialog Error ( convert Error Body ( it ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( build Dialog Error ( UNKNOWN _ ERROR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsafe Cache Call () Ġ= Ġflow < Data State < ViewState >> Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . run Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Timeout ( CACHE _ TIMEOUT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcache Call ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Cache Success ( result )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTimeout Cancellation Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( build Dialog Error ( CACHE _ ERROR _ TIMEOUT )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( build Dialog Error ( UNKNOWN _ ERROR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild Dialog Error ( ĊĠĠĠĠĠĠĠ Ġmessage : ĠString ? ĊĠĠĠ Ġ): ĠData State < ViewState > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠData State . ERROR ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui ComponentType Ġ= ĠUI ComponentType . DIALOG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type Ġ= ĠMessageType . ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert Error Body ( throwable : ĠHttp Exception ): ĠString ? Ġ= ĊĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable . response ()?. error Body ()?. string () ĊĠĠĠĠĠĠĠ Ġ}. get OrDefault ( UNKNOWN _ ERROR ) ĊĊĠĠĠ Ġopen Ġsuspend Ġfun Ġhandle Network Success ( response : ĠNetwork Obj ): ĊĠĠĠĠĠĠĠ ĠData State < ViewState >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġsuspend Ġfun Ġhandle Cache Success ( response : ĠCache Obj ?): ĊĠĠĠĠĠĠĠ ĠData State < ViewState >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġsuspend Ġfun Ġupdate Cache ( network Object : ĠNetwork Obj ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWaiting Ġfor Ġoverride ĊĠĠĠ Ġ} Ċ } Ċ