package Ġio . kaz ak . api Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġio . kaz ak . api . json . Json K az ak Api Ċ import Ġio . kaz ak . api . json . model . Json Event Ċ import Ġio . kaz ak . model . Schedule Ċ import Ġio . kaz ak . repository . Json Repository Ċ import Ġrx . Observable Ċ import Ġrx . schedul ers . Schedulers Ċ Ċ class ĠPers isted K az ak Api ( val Ġremote Api : ĠJson K az ak Api , Ġval Ġjson Repository : ĠJson Repository , Ġval Ġgson : ĠGson ) Ġ: ĠK az ak Api Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġfetch Schedule (): ĠObservable < Schedule > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . concat ( fetch Local Schedule (), Ġfetch Remote Schedule ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠtoJson Events ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġas Schedule ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Local Schedule (): ĠObservable < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġjson Repository . read () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Remote Schedule (): ĠObservable < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġremote Api . fetch Schedule () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ Ġjson Repository . store ( it ). subscribe () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠtoJson Events ( it : ĠString ): ĠList < Json Event > Ġ= Ġgson . fromJson ( it , Ġobject Ġ: ĠType Token < List < Json Event >>() Ġ{} . type ) Ċ Ċ } Ċ