/* Ċ Ġ* ĠCreated Ġby ĠWe i yi ĠLi Ġon Ġ 2 0 2 0 - 0 4 - 2 5 . Ċ Ġ* Ġhttps :// github . com / li 2 Ċ Ġ*/ Ċ package Ġme . li 2 . movies . util Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġme . li 2 . android . common . arch . Resource Ċ import Ġme . li 2 . android . common . arch . post Error Ċ import Ġme . li 2 . android . common . arch . post Loading Ċ import Ġme . li 2 . android . common . arch . post Success Ċ import Ġtim ber . log . Tim ber Ċ Ċ fun ĠViewModel . io ( onError : Ġ( Exception ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġio Handler : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġio Handler () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonError ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T > ĠViewModel . io With LiveData ( mutable LiveData : ĠMutable LiveData < Resource < T >>, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforce Refresh : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġio Handler : Ġsuspend ĠCor outine Scope . () Ġ-> ĠT ) Ġ{ ĊĠĠĠ Ġif Ġ(! force Refresh ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable LiveData . value ?. data ?. let Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable LiveData . post Success ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġmutable LiveData . post Loading () ĊĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable LiveData . post Success ( io Handler ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable LiveData . post Error ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T > ĠViewModel . ui ( ui Handler : ĠCor outine Scope . () Ġ-> ĠT ) Ġ{ ĊĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠ Ġui Handler () ĊĠĠĠ Ġ} Ċ }