package Ġcom . vod ol az sk iy . forecast application . presentation Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . vod ol az sk iy . forecast application . core . li ved ata . to Single Event Ċ import Ġcom . vod ol az sk iy . forecast application . domain . Forecast Use case Ċ import Ġcom . vod ol az sk iy . forecast application . domain . entity . Forecast Item Ċ import Ġcom . vod ol az sk iy . forecast application . presentation . base . Base ViewModel Ċ import Ġkotlinx . coroutines . Coroutine ExceptionHandler Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ class ĠFore cast ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġforecast Use case : ĠFore cast Use case Ċ ) Ġ: ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġforecast s Internal Ġ= ĠMutable LiveData < List < Forecast Item >>() ĊĠĠĠ Ġval Ġforecast s : ĠLive Data < List < Forecast Item >> Ġ= Ġforecast s Internal ĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġval ĠisLoading Internal Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMutable LiveData < Boolean >(). apply Ġ{ Ġvalue Ġ= Ġfalse Ġ} ĊĠĠĠ Ġval ĠisLoading : ĠLive Data < Boolean > Ġ= ĠisLoading Internal ĊĠĠĠ Ġprivate Ġval Ġerror Internal Ġ= ĠMutable LiveData < Throwable >() ĊĠĠĠ Ġval Ġerror : ĠLive Data < Throwable > Ġ= Ġerror Internal . to Single Event () ĊĊĠĠĠ Ġprivate Ġval Ġexception Handler : ĠCor outine Context Ġ= ĠCor outine ExceptionHandler Ġ{ Ġ_, Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠ ĠLog . e (" Forecast ViewModel ", Ġ"", Ġthrowable ) ĊĠĠĠĠĠĠĠ ĠisLoading Internal . post Value ( false ) ĊĠĠĠĠĠĠĠ Ġerror Internal . post Value ( throwable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Forecast () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( forecast s Internal . value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Forecast () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// receive Ġforecast Ġfrom ĠLive Data ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Forecast () Ġ= Ġload Forecast () ĊĊĠĠĠ Ġprivate Ġfun Ġload Forecast () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isLoading Internal . value Ġ== Ġtrue ) Ġreturn ĊĠĠĠĠĠĠĠ ĠisLoading Internal . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . Main Ġ+ Ġexception Handler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġasync ( background Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforecast Use case . get Forecast () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtask . await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforecast s Internal . value Ġ= Ġresult . forecast s ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Internal . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Forecast ViewModel ", Ġ" list Ġafter Ġawait Ġ= Ġ$ result ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ