package Ġcom . android . sun ny weather . view model Ċ Ċ import Ġandroidx . databinding . Observable Field Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . android . sun ny weather . model . Weather Repository Ċ import Ġcom . android . sun ny weather . model . data . Weather Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠWeather ViewModel ( var Ġplace Name Ġ: ĠObservable Field < String >, var Ġlat Ġ: ĠString , var Ġlng Ġ: ĠString ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ weather Ġ= ĠMutable LiveData < Weather >() ĊĠĠĠ Ġval Ġweather Ġ: ĠLive Data < Weather > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ weather ĊĊĠĠĠ Ġprivate Ġval Ġ_ weather Failure Ġ= ĠMutable LiveData < Throwable >() ĊĠĠĠ Ġval Ġweather Failure Ġ: ĠLive Data < Throwable > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ weather Failure ĊĊĠĠĠ Ġfun Ġrefresh Weather (){ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ( Dispatch ers . IO ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeferred Realtime Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Repository . get Realtime Weather ( lat , Ġlng ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeferred Daily Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Repository . get Daily Weather ( lat , Ġlng ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal time Response Ġ= Ġdeferred Realtime . await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdaily Response Ġ= Ġdeferred Daily . await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( realtime Response . status Ġ== Ġ" ok " Ġ&& Ġdaily Response . status Ġ== Ġ" ok "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweather Ġ= ĠWeather ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreal time Response . result . realtime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdaily Response . result . daily ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ weather . post Value ( weather ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ weather Failure . post Value ( RuntimeException (" realtime Ġstatus Ġis Ġ${ realtime Response . status } Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" daily Ġstatus Ġis Ġ${ daily Response . status } ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e Ġ: ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ weather Failure . post Value ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }