package Ġcom . bad oo . reak t ive . sample mpp module . store Ċ Ċ import Ġcom . bad oo . reak t ive . dis posable . Composite Disposable Ċ import Ġcom . bad oo . reak t ive . dis posable . Disposable Ċ import Ġcom . bad oo . reak t ive . observable . Observable Ċ import Ġcom . bad oo . reak t ive . sample mpp module . store . Kit ten Store . Intent Ċ import Ġcom . bad oo . reak t ive . sample mpp module . store . Kit ten Store . State Ċ import Ġcom . bad oo . reak t ive . scheduler . computation Scheduler Ċ import Ġcom . bad oo . reak t ive . scheduler . main Scheduler Ċ import Ġcom . bad oo . reak t ive . single . map Ċ import Ġcom . bad oo . reak t ive . single . observe On Ċ import Ġcom . bad oo . reak t ive . single . subscribe Ċ import Ġcom . bad oo . reak t ive . subject . behavior . behavior Subject Ċ import Ġcom . bad oo . reak t ive . utils . ensure Never Frozen Ċ Ċ internal Ġclass ĠKit ten Store Impl ( ĊĠĠĠ Ġprivate Ġval Ġloader : ĠKit ten Loader Ċ ) Ġ: ĠKit ten Store Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ states Ġ= Ġbehavior Subject ( State ()). ensure Never Frozen () ĊĠĠĠ Ġoverride Ġval Ġstates : ĠObservable < State > Ġ= Ġ_ states ĊĠĠĠ Ġprivate Ġval Ġstate : ĠState Ġget () Ġ= Ġ_ states . value ĊĊĠĠĠ Ġprivate Ġval Ġdis pos ables Ġ= ĠComposite Disposable () ĊĠĠĠ Ġoverride Ġval Ġis Disposed : ĠBoolean Ġget () Ġ= Ġdis pos ables . is Disposed ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis pos ables . dispose () ĊĠĠĠĠĠĠĠ Ġ_ states . onComplete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġaccept ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute ( intent )?. let ( dis pos ables :: add ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute ( intent : ĠIntent ): ĠDis posable ? Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( intent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIntent . Reload Ġ-> Ġreload () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIntent . Dismiss Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Result ( Effect . Dismiss Error Requested ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreload (): ĠDis posable ? Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( state . isLoading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Result ( Effect . Loading Started ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġloader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( computation Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠKit ten Loader . Result . Success Ġ-> ĠEffect . Loaded ( parse Url ( it . json )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠKit ten Loader . Result . Error Ġ-> ĠEffect . Loading Failed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( is Thread Local Ġ= Ġtrue , ĠonSuccess Ġ= Ġ:: on Result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Result ( effect : ĠEffect ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ states . onNext ( Reducer ( effect , Ġ_ states . value )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġparse Regex Ġ= Ġ"( ?: \" url \": \") (.* ? )( ?: \") ". to Regex () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġparse Url ( json : ĠString ): ĠString Ġ= Ġparse Regex . find ( json ) !!. group Values [ 1 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsealed Ġclass ĠEffect Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠLoading Started Ġ: ĠEffect () ĊĠĠĠĠĠĠĠ Ġclass ĠLoaded ( val Ġkit ten Url : ĠString ?) Ġ: ĠEffect () ĊĠĠĠĠĠĠĠ Ġobject ĠLoading Failed Ġ: ĠEffect () ĊĠĠĠĠĠĠĠ Ġobject ĠDis miss Error Requested Ġ: ĠEffect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠRed ucer Ġ{ ĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġinvoke ( effect : ĠEffect , Ġstate : ĠState ): ĠState Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( effect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEffect . Loading Started Ġ-> Ġstate . copy ( isLoading Ġ= Ġtrue , Ġis Error Ġ= Ġfalse , Ġkit ten Url Ġ= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEffect . Loaded Ġ-> Ġstate . copy ( isLoading Ġ= Ġfalse , Ġis Error Ġ= Ġfalse , Ġkit ten Url Ġ= Ġeffect . kit ten Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEffect . Loading Failed Ġ-> Ġstate . copy ( isLoading Ġ= Ġfalse , Ġis Error Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEffect . Dismiss Error Requested Ġ-> Ġstate . copy ( isError Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ