package Ġcom . hoc . weather app . data Ċ Ċ import Ġcom . hoc . weather app . data . Local DataSource Util . save City And Current Weather Ċ import Ġcom . hoc . weather app . data . Local DataSource Util . save Five Day Forecast Weather Ċ import Ġcom . hoc . weather app . data . local . City Local DataSource Ċ import Ġcom . hoc . weather app . data . local . Current Weather Local DataSource Ċ import Ġcom . hoc . weather app . data . local . Five Day Forecast Local DataSource Ċ import Ġcom . hoc . weather app . data . local . Selected City Preference Ċ import Ġcom . hoc . weather app . data . models . entity . City Ċ import Ġcom . hoc . weather app . data . remote . Open Weather Map ApiService Ċ import Ġcom . hoc . weather app . data . remote . Timezone Db ApiService Ċ import Ġcom . hoc . weather app . data . remote . get Zone Id Ċ import Ġcom . hoc . weather app . utils . None Ċ import Ġcom . hoc . weather app . utils . Optional Ċ import Ġcom . hoc . weather app . utils . Some Ċ import Ġcom . hoc . weather app . utils . get OrNull Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . rx kotlin . Sing les Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ Ċ class ĠCity Repository Impl ( ĊĠ Ġprivate Ġval Ġopen Weather Map ApiService : ĠOpen Weather Map ApiService , ĊĠ Ġprivate Ġval Ġtimezone Db ApiService : ĠTime zone Db ApiService , ĊĠ Ġprivate Ġval Ġcity Local DataSource : ĠCity Local DataSource , ĊĠ Ġprivate Ġval Ġfive Day Forecast Local DataSource : ĠF ive Day Forecast Local DataSource , ĊĠ Ġprivate Ġval Ġcurrent Weather Local DataSource : ĠCurrent Weather Local DataSource , ĊĠ Ġprivate Ġval Ġselected City Preference : ĠSelected City Preference Ċ ) Ġ: ĠCity Repository Ġ{ ĊĠ Ġ/** ĊĠĠ Ġ* ĠS ynchronous Ġaccess Ġ Ġselected Ġcity ĊĠĠ Ġ*/ ĊĠ Ġoverride Ġval Ġselected City Ġget () Ġ= Ġselected City Preference . value . get OrNull () ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠGet Ġstream Ġof Ġselected Ġcity ĊĠĠ Ġ* Ġ@ return Ġ[ Observable ] Ġemit Ġ[ None ] Ġwhen Ġhaving Ġno Ġselected Ġcity , Ġotherwise Ġemit Ġ[ Some ] Ġof Ġ[ City ] ĊĠĠ Ġ*/ ĊĠ Ġoverride Ġfun Ġget Selected City () Ġ= Ġselected City Preference . observable ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠDelete Ġ[ city ] ĊĠĠ Ġ* Ġ@ param Ġcity ĊĠĠ Ġ* Ġ@ return Ġa Ġ[ Comp letable ] ĊĠĠ Ġ*/ ĊĠ Ġoverride Ġfun Ġdelete City ( city : ĠCity ): ĠSingle < City > Ġ{ ĊĠĠĠ Ġreturn ĠComp letable . merge Array ( ĊĠĠĠĠĠ Ġcity Local DataSource ĊĠĠĠĠĠĠĠ Ġ. delete City ( city ) ĊĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()), ĊĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠ Ġ* ĠIf Ġ[ city ] Ġis Ġcurrent Ġselected Ġcity , Ġthen Ġ[ change Selected City ] Ġto Ġnull ĊĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠ ĠSingle ĊĠĠĠĠĠĠĠ Ġ. from Callable Ġ{ Ġselected City Preference . value Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . get OrNull () Ġ== Ġcity Ġ} ĊĠĠĠĠĠĠĠ Ġ. flatMap Comp letable Ġ{ Ġchange Selected City ( None ) Ġ} ĊĠĠĠ Ġ). to Single Default ( city ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAdd Ġcity Ġby Ġ[ latitude ] Ġand Ġ[ longitude ] ĊĠĠ Ġ* Ġ@ param Ġlatitude ĊĠĠ Ġ* Ġ@ param Ġlongitude ĊĠĠ Ġ* Ġ@ return Ġa Ġ[ Single ] Ġemit Ġadded Ġcity Ġor Ġemit Ġerror ĊĠĠ Ġ*/ ĊĠ Ġoverride Ġfun Ġadd City By LatLng ( latitude : ĠDouble , Ġlongitude : ĠDouble ): ĠSingle < City > Ġ{ ĊĠĠĠ Ġreturn ĠSing les . zip ( ĊĠĠĠĠĠ Ġopen Weather Map ApiService ĊĠĠĠĠĠĠĠ Ġ. getCurrent Weather By LatLng ( latitude , Ġlongitude ) ĊĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()), ĊĠĠĠĠĠ Ġget Zone Id ( timezone Db ApiService , Ġlatitude , Ġlongitude ) ĊĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠ Ġsave City And Current Weather ( ĊĠĠĠĠĠĠĠĠĠ Ġcity Local DataSource , ĊĠĠĠĠĠĠĠĠĠ Ġcurrent Weather Local DataSource , ĊĠĠĠĠĠĠĠĠĠ Ġit . first , ĊĠĠĠĠĠĠĠĠĠ Ġit . second ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. map Ġ{ Ġit . city Ġ} ĊĠĠĠĠĠ Ġ. flatMap Ġ{ Ġcity Ġ-> ĊĠĠĠĠĠĠĠ Ġopen Weather Map ApiService ĊĠĠĠĠĠĠĠĠĠ Ġ. get 5 Day Every 3 Hour Forecast By City Id ( city . id ) ĊĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġsave Five Day Forecast Weather ( five Day Forecast Local DataSource , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġcity Ġ} ĊĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠChange Ġselected Ġcity Ġto Ġ[ city ] ĊĠĠ Ġ* Ġ@ param Ġcity ĊĠĠ Ġ* Ġ@ return Ġa Ġ[ Comp letable ], Ġemit Ġ[ Save Selected City Error ] Ġwhen Ġerror ĊĠĠ Ġ*/ ĊĠ Ġoverride Ġfun Ġchange Selected City ( city : ĠCity ) Ġ= Ġchange Selected City ( Some ( city )) ĊĊĊĠ Ġ/** ĊĠĠ Ġ* ĠChange Ġselected Ġcity Ġto Ġ[ city ] ĊĠĠ Ġ* Ġ@ param Ġoptional City Ġif Ġ[ optional City ] Ġis Ġ[ None ], Ġindicates Ġthat Ġhave Ġnot Ġselected Ġcity ĊĠĠ Ġ* Ġ@ return Ġa Ġ[ Comp letable ], Ġemit Ġ[ Save Selected City Error ] Ġwhen Ġerror ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġchange Selected City ( optional City : ĠOptional < City >): ĠComp letable Ġ{ ĊĠĠĠ Ġreturn ĠComp letable ĊĠĠĠĠĠ Ġ. from Callable Ġ{ Ġselected City Preference . save ( optional City ) Ġ} ĊĠĠĠĠĠ Ġ. subscribe On ( Schedulers . single ()) ĊĠĠĠĠĠ Ġ. onError Resume Next Ġ{ ĠComp letable . error ( Save Selected City Error ( it )) Ġ} ĊĠ Ġ} Ċ }