package Ġcom . ti . sun rain . logic Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . live Data Ċ import Ġcom . ti . sun rain . logic . dao . Place Dao Ċ import Ġcom . ti . sun rain . logic . dao . Weather Dao Ċ import Ġcom . ti . sun rain . logic . model . Place Response . Place Ċ import Ġcom . ti . sun rain . logic . model . Weather Ċ import Ġcom . ti . sun rain . logic . network . Sun Rain Net Work Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġkotlin . coroutines . Coroutine Context ĊĊ Ċ object ĠRepository Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä»ĵåºĵ å±Ĥ ï¼Į åĪĨæŀĲ è¿ĶåĽŀ æķ°æį® å¹¶ ä½¿çĶ¨ Ġli ved ata Ġ æĮģ ä¹ħ åĮĸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsearch Places ( query : ĠString ) Ġ= Ġfire ( Dispatch ers . IO ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace Response Ġ= ĠSun Rain Net Work . search Places ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( place Response . status ==" ok "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaces Ġ= Ġplace Response . places ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . success ( places ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( RuntimeException (" Response Ġstatus Ġis Ġ${ place Response . status } ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪ·æĸ° å¤© æ°Ķ , åĪ©çĶ¨ lng åĴĮ lat ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrefresh Weather ( lng : String , lat : String ) Ġ= Ġfire ( Dispatch ers . IO ){ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeferred Realtime Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSun Rain Net Work . get Realtime Weather ( lng , Ġlat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeferred Daily Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSun Rain Net Work . get Daily Weather ( lng , Ġlat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeferred Hour ly Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSun Rain Net Work . get Hour ly Weather ( lng , Ġlat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeferred Min ut ely Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSun Rain Net Work . getMin ut ely Rain ( lng , Ġlat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal time Response Ġ= Ġdeferred Realtime . await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdaily Response Ġ= Ġdeferred Daily . await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhourly Response Ġ= Ġdeferred Hour ly . await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin ut ely Response Ġ= Ġdeferred Min ut ely . await () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( realtime Response . status Ġ== Ġ" ok " Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdaily Response . status Ġ== Ġ" ok " Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhourly Response . status Ġ== Ġ" ok " Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin ut ely Response . status Ġ== Ġ" ok "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweather Ġ= ĠWeather ( realtime Response . result . realtime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdaily Response . result . daily , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreal time Response , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreal time Response . result . realtime . wind , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhourly Response . result . hourly , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin ut ely Response . result . min ut ely ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . success ( weather ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRuntimeException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" WARNING : Ġreal time Ġstatus Ġis Ġ${ realtime Response . status } Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" WARNING : Ġdaily Ġstatus Ġis Ġ${ daily Response . status } Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" WARNING : Ġhourly Ġstatus Ġis Ġ${ hourly Response . status } Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" WARNING : Ġhourly Ġstatus Ġis Ġ${ min ut ely Response . status }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġfire ( context : Coroutine Context , block : suspend ()-> ĠResult < T >): ĠLive Data < Result < T >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlive Data < Result < T >>( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure < T >( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮģ ä¹ħ åĮĸ åŃĺåĤ¨ ï¼Į åŃĺåĤ¨ è®¿éĹ® çļĦ åŁİ å¸Ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave Place ( place : ĠPlace ) Ġ= ĠPlace Dao . save Place ( place ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¯»åıĸ åŁİ å¸Ĥ ä¿¡æģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Saved Place () Ġ= ĠPlace Dao . get Saved Place () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ åŁİ å¸Ĥ æĺ¯åĲ¦ åľ¨ åĪĹè¡¨ éĩĮ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Place Saved () Ġ= ĠPlace Dao . is Place Saved () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå°Ĩ ĠUNIX Ġ æĹ¶éĹ´ è½¬æį¢ æĪĲ Ġstring Ġ æł¼å¼ı çļĦ Ġdate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġchange UNIX In toString ( unix Time : Long )= Weather Dao . change UNIX In toString ( unix Time ) Ċ }