package Ġcom . cy bers h ark . j okes . ui . home Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . cy bers h ark . j okes . data . models . Jo ke Ċ import Ġcom . cy bers h ark . j okes . data . resp ositor ies . Main Repository Ċ import Ġcom . cy bers h ark . j okes . ui . home . util . Jo ke State Ċ import Ġcom . cy bers h ark . j okes . util .* Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠHome ViewModel Ċ @ Inject Ċ constructor ( ĊĠĠĠ Ġprivate Ġval Ġmain Repository : ĠMain Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ ui State : ĠMutable LiveData < UIState > Ġ= ĠMutable LiveData < UIState >(). getDefault () ĊĠĠĠ Ġval Ġui State : ĠLive Data < UIState > Ġ= Ġ_ ui State ĊĠĠĠ Ġprivate Ġval Ġ_ current Jo ke : ĠMutable LiveData < Jo ke State > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġcurrent Jo ke : ĠLive Data < Jo ke State > Ġ= Ġ_ current Jo ke ĊĊĠĠĠ Ġfun ĠgetRandom Jo ke () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ ui State . set Loading () ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġmain Repository . getRandom Jo ke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjo ke Body : ĠJo ke ? Ġ= Ġresponse . get OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjo ke Body ?. let Ġ{ Ġjo ke Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmain Repository . does Jo ke Exist ( jo ke . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ current Jo ke . value Ġ= ĠJo ke State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Jo ke Favorite Ġ= Ġresult . getOrElse Ġ{ Ġfalse Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjo ke Ġ= Ġjo ke ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . set Success (" Jo ke Ġfetched !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . setError ( response . exception OrNull ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Jo ke ( jo ke : ĠJo ke ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ ui State . set Loading () ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmain Repository . save Jo ke ( jo ke . get Jo ke Entity ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . set Success (" Saved Ġjo ke Ġto Ġfavor ites ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ current Jo ke . value Ġ= Ġ_ current Jo ke . value ?. copy ( is Jo ke Favorite Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . setError ( result . exception OrNull ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Jo ke ( jo ke : ĠJo ke ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ ui State . set Loading () ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmain Repository . remove Jo ke ( jo ke . get Jo ke Entity ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . set Success (" Removed Ġjo ke Ġfrom Ġfavor ites ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ current Jo ke . value Ġ= Ġ_ current Jo ke . value ?. copy ( is Jo ke Favorite Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . setError ( result . exception OrNull ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ