package Ġcom . w inter projects . tv ma ze app . presentation . favorite Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . w inter projects . tv ma ze app . business . shows .* Ċ import Ġcom . w inter projects . tv ma ze app . domain . helpers . Result State Ċ import Ġcom . w inter projects . tv ma ze app . domain . shows . models . Favorite Show Model Ċ import Ġkotlinx . coroutines .* Ċ Ċ class ĠF avorites ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġfetch All Favorite Shows UseCase : ĠFetch All Favorite Shows UseCase , ĊĠĠĠ Ġprivate Ġval Ġup Insert Favorite Show UseCase : ĠUp Insert Favorite Show UseCase , ĊĠĠĠ Ġprivate Ġval Ġdelete Favorite Show UseCase : ĠDelete Favorite Show UseCase , ĊĠĠĠ Ġprivate Ġval Ġdefault Dispatcher : ĠCor outine Dispatcher Ġ= ĠDispatch ers . IO Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ last Position Favorite Show Model Removed : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġval Ġlast Position Favorite Show Model Removed : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ last Position Favorite Show Model Removed ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ last Favorite Show Model Removed : ĠF avorite Show Model ĊĊĠĠĠ Ġprivate Ġvar Ġmutable F avorites Ġ= ĠMutable LiveData < Result State < Mutable List < Favorite Show Model >> >() ĊĊĠĠĠ Ġval Ġfavor ites : ĠLive Data < Result State < Mutable List < Favorite Show Model >>> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmutable F avorites ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( default Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch All Favorite Shows UseCase (). let Ġ{ Ġfavor ites Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable F avorites . post Value ( favorites ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Favorite Item ( position : ĠInt , Ġfavorite Show Model : ĠF avorite Show Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ last Position Favorite Show Model Removed Ġ= Ġposition ĊĊĠĠĠĠĠĠĠ Ġfavor ites . value ?. data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . first OrNull Ġ{ Ġx Ġ-> Ġx . id Ġ== Ġfavorite Show Model . id Ġ} ?. let Ġ{ Ġfav Show Model Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ last Favorite Show Model Removed Ġ= Ġfav Show Model ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . remove (_ last Favorite Show Model Removed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Favorite Item On Db () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable F avorites . post Value ( Result State . Empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable F avorites . post Value ( Result State . Loaded ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Favorite Item On Db () Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Scope (). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( default Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Favorite Show UseCase (_ last Favorite Show Model Removed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġundo Remove Favorite Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! this ::_ last Favorite Show Model Removed . isInitialized ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġfavor ites . value ?. data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add (_ last Position Favorite Show Model Removed , Ġ_ last Favorite Show Model Removed ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġundo Remove Favorite Show On DB () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable F avorites . post Value ( Result State . Loaded ( it )) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġundo Remove Favorite Show On DB () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable F avorites . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult State . Loaded ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ last Favorite Show Model Removed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġundo Remove Favorite Show On DB () Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Scope (). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( default Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Insert Favorite Show UseCase (_ last Favorite Show Model Removed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }