package Ġcom . weather app . presentation . weather Ċ Ċ import Ġandroidx . h ilt . lifecycle . ViewModel Inject Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . weather app . core . Event Ċ import Ġcom . weather app . domain . Failure Ċ import Ġcom . weather app . domain . Success Ċ import Ġcom . weather app . domain . weather . Current Day Weather UseCase Ċ import Ġcom . weather app . domain . weather . Five Days Weather UseCase Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠCity Weather ViewModel Ġ@ ViewModel Inject Ġconstructor ( ĊĠĠĠ Ġval Ġcurrent Day Weather UseCase : ĠCurrent Day Weather UseCase , ĊĠĠĠ Ġval Ġfive Day Weather UseCase : ĠF ive Days Weather UseCase , ĊĠĠĠ Ġprivate Ġval Ġcurrent Day Weather Mapper : ĠCurrent Day Weather Mapper , ĊĠĠĠ Ġprivate Ġval Ġfive Days Weather Mapper : ĠF ive Days Weather Mapper Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ view State Ġ= ĠMutable LiveData < Current Weather ViewState >() ĊĠĠĠ Ġval Ġview State : ĠLive Data < Current Weather ViewState > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ view State ĊĊĠĠĠ Ġprivate Ġval Ġ_ five Days Weather ViewState Ġ= ĠMutable LiveData < Five Days Weather ViewState >() ĊĠĠĠ Ġval Ġfive Days Weather ViewState : ĠLive Data < Five Days Weather ViewState > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ five Days Weather ViewState ĊĊĠĠĠ Ġfun ĠgetCurrent Weather Data ( lat : ĠDouble , Ġlng : ĠDouble ) Ġ= ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġemit Ui State ( Event ( true )) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġweather Result Ġ= Ġcurrent Day Weather UseCase ( lat , Ġlng )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSuccess Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Weather Data Ġ= Ġcurrent Day Weather Mapper . map ( weather Result . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Ui State ( show Success Ġ= Ġcurrent Weather Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFailure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Ui State ( show Error Ġ= Ġweather Result . exception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Five Days Weather Data ( lat : ĠDouble , Ġlng : ĠDouble ) Ġ= ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġweather Result Ġ= Ġfive Day Weather UseCase ( lat , Ġlng )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSuccess Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfive Days Weather Data Ġ= Ġfive Days Weather Mapper . map ( weather Result . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ five Days Weather ViewState . post Value ( Five Days Weather ViewState ( data Ġ= Ġfive Days Weather Data )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFailure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ five Days Weather ViewState . post Value ( Five Days Weather ViewState ( error Ġ= Ġweather Result . exception )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġemit Ui State ( ĊĠĠĠĠĠĠĠ Ġshow Progress : ĠEvent < Boolean > Ġ= ĠEvent ( false ), ĊĠĠĠĠĠĠĠ Ġshow Error : ĠException ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġshow Success : ĠCurrent Day Weather Model ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview State Ġ= ĠCurrent Weather ViewState ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Progress , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Success ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ_ view State . post Value ( view State ) ĊĠĠĠ Ġ} Ċ }