package Ġcom . prototype . exam . ui . main . viewModel Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . prototype . exam . data . api . Result Wrapper Ċ import Ġcom . prototype . exam . data . model . User Ċ import Ġcom . prototype . exam . data . repository . UserRepository Ċ import Ġcom . prototype . exam . ui . base . Base ViewModel Ċ import Ġcom . prototype . exam . utils . Network Helper Ċ import Ġcom . prototype . exam . utils . Result Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠUser ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠUser Repository , ĊĠĠĠ Ġprivate Ġval Ġnetwork Helper : ĠNetwork Helper Ċ ) Ġ: ĠBase ViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ users Ġ= ĠMutable LiveData < Result < List < User >> >() ĊĠĠĠ Ġval Ġusers : ĠLive Data < Result < List < User >>> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ users ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfetch Users () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġfetch Users () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ users . post Value ( Result . loading ( null )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! network Helper . is Network Connected ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ users . post Value ( Result . error ( null , Ġ" No Ġinternet Ġconnection ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresponse Ġ= Ġrepository . get Users ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult Wrapper . Network Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ users . post Value ( Result . error ( null , Ġ" Something Ġwent Ġwrong !! ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult Wrapper . Generic Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . error ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ users . post Value ( Result . error ( null , Ġit . errorMessage )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ users . post Value ( Result . error ( null , Ġ" Something Ġwent Ġwrong !! ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult Wrapper . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusers Ġ= Ġresponse . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers ?. let Ġ{ Ġrepository . add Users ( it . toList ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ users . post Value ( Result . success ( users )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Live Local Users (): ĠLive Data < List < User >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrepository . getLocal Users () ĊĠĠĠ Ġ} Ċ }