package Ġcom . github . alf ab r avo 2 0 1 3 . mar vel characters . presentation . detail Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . github . alf ab r avo 2 0 1 3 . mar vel characters . R Ċ import Ġcom . github . alf ab r avo 2 0 1 3 . mar vel characters . domain . detail . Detail UseCase Ċ import Ġcom . github . alf ab r avo 2 0 1 3 . mar vel characters . networking . Mar vel Api Ċ import Ġcom . github . alf ab r avo 2 0 1 3 . mar vel characters . presentation . characters . model . Detail Ċ import Ġcom . github . alf ab r avo 2 0 1 3 . mar vel characters . utils . Single Live Event Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠDetail ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġdetail UseCase : ĠDetail UseCase Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ on Event Ġ= ĠSingle Live Event < On Event >() ĊĠĠĠ Ġval Ġon Event : ĠSingle Live Event < On Event > Ġget () Ġ= Ġ_ on Event ĊĊĠĠĠ Ġfun Ġget Detail ( character Id : ĠInt ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ on Event . value Ġ= ĠOn Event . Show Loading ĊĊĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetail UseCase . get Character ById ( character Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. on Success Ġ{ Ġdetail Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Event . value Ġ= ĠOn Event . Show Detail ( detail ) ĊĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ on Event . value Ġ= ĠOn Event . Hide Loading ĊĠĠĠĠĠĠĠ Ġ_ on Event . value Ġ= ĠOn Event . Bookmark Status ( detail UseCase . is Book marked ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Bookmark Click () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġkotlin . run Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetail UseCase . switch Book marked Status () ĊĠĠĠĠĠĠĠ Ġ}. on Success Ġ{ Ġbook marked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Event . value Ġ= ĠOn Event . Bookmark Status ( book marked ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmessageId Ġ= Ġif Ġ( book marked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . detail _ bookmark _ added ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . detail _ bookmark _ removed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Event . value Ġ= ĠOn Event . Message ( message Id ) ĊĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ on Event . value Ġ= ĠOn Event . Message ( R . string . detail _ bookmark _ error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Error ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( ex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMar vel Api . NotFoundException Ġ-> Ġ_ on Event . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOn Event . Message ( R . string . character _ not _ found ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ_ on Event . value Ġ= ĠOn Event . Message ( R . string . unknown _ error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠOn Event Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠShow Loading Ġ: ĠOn Event () ĊĠĠĠĠĠĠĠ Ġobject ĠHide Loading Ġ: ĠOn Event () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠBook mark Status ( val Ġbook marked : ĠBoolean ) Ġ: ĠOn Event () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠShow Detail ( val Ġdetail : ĠDetail ) Ġ: ĠOn Event () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠMessage ( val ĠmessageId : ĠInt ) Ġ: ĠOn Event () ĊĠĠĠ Ġ} Ċ } Ċ