package Ġcom . hoc . pagination _ m vi . ui . main Ċ Ċ import Ġcom . hoc . pagination _ m vi . di . Application Scope Ċ import Ġcom . hoc . pagination _ m vi . domain . dispatch ers _ schedul ers . Cor outines Dispatch ers Provider Ċ import Ġcom . hoc . pagination _ m vi . domain . use case . Get Photos UseCase Ċ import Ġcom . hoc . pagination _ m vi . domain . use case . Get Posts UseCase Ċ import Ġcom . hoc . pagination _ m vi . ui . main . Main Contract . Partial StateChange .* Ċ import Ġcom . hoc . pagination _ m vi . ui . main . Main Contract . Photo VS Ċ import Ġcom . hoc . pagination _ m vi . ui . main . Main Contract . Post VS Ċ import Ġio . reactivex . Observable Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . rx 2 . rx Observable Ċ import Ġjavax . inject . Inject Ċ Ċ @ Application Scope Ċ @ Experimental Cor outines Api Ċ class ĠMain Interactor Impl Ġ@ Inject Ġconstructor ( ĊĠ Ġprivate Ġval Ġget Photos UseCase : ĠGet Photos UseCase , ĊĠ Ġprivate Ġval Ġget Posts UseCase : ĠGet Posts UseCase , ĊĠ Ġprivate Ġval Ġdispatch ers : ĠCor outines Dispatch ers Provider Ċ ) Ġ: ĠMain Contract . Interactor Ġ{ ĊĠ Ġoverride Ġfun Ġphoto Next Page Changes ( ĊĠĠĠ Ġstart : ĠInt , ĊĠĠĠ Ġlimit : ĠInt ĊĠ Ġ): ĠObservable < Photo Next Page > Ġ{ ĊĠĠĠ Ġreturn Ġrx Observable ( dispatch ers . main ) Ġ{ ĊĠĠĠĠĠ Ġsend ( Photo Next Page . Loading ) ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġget Photos UseCase ( start Ġ= Ġstart , Ġlimit Ġ= Ġlimit ) ĊĠĠĠĠĠĠĠĠĠ Ġ. map ( Main Contract :: Photo VS ) ĊĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠPhoto Next Page . Data ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġsend ( it ) Ġ} ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay Error () ĊĠĠĠĠĠĠĠ Ġsend ( Photo Next Page . Error ( e )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġphoto First Page Changes ( limit : ĠInt ): ĠObservable < Photo First Page > Ġ{ ĊĠĠĠ Ġreturn Ġrx Observable ( dispatch ers . main ) Ġ{ ĊĠĠĠĠĠ Ġsend ( Photo First Page . Loading ) ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġget Photos UseCase ( start Ġ= Ġ 0 , Ġlimit Ġ= Ġlimit ) ĊĠĠĠĠĠĠĠĠĠ Ġ. map (:: Photo VS ) ĊĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠPhoto First Page . Data ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġsend ( it ) Ġ} ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay Error () ĊĠĠĠĠĠĠĠ Ġsend ( Photo First Page . Error ( e )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpost First Page Changes ( limit : ĠInt ): ĠObservable < Post First Page > Ġ{ ĊĠĠĠ Ġreturn Ġrx Observable ( dispatch ers . main ) Ġ{ ĊĠĠĠĠĠ Ġsend ( Post First Page . Loading ) ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġget Posts UseCase ( start Ġ= Ġ 0 , Ġlimit Ġ= Ġlimit ) ĊĠĠĠĠĠĠĠĠĠ Ġ. map (:: Post VS ) ĊĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠPost First Page . Data ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġsend ( it ) Ġ} ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay Error () ĊĠĠĠĠĠĠĠ Ġsend ( Post First Page . Error ( e )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpost Next Page Changes ( ĊĠĠĠ Ġstart : ĠInt , ĊĠĠĠ Ġlimit : ĠInt ĊĠ Ġ): ĠObservable < Post Next Page > Ġ{ ĊĠĠĠ Ġreturn Ġrx Observable ( dispatch ers . main ) Ġ{ ĊĠĠĠĠĠ Ġsend ( Post Next Page . Loading ) ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġget Posts UseCase ( start Ġ= Ġstart , Ġlimit Ġ= Ġlimit ) ĊĠĠĠĠĠĠĠĠĠ Ġ. map (:: Post VS ) ĊĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠPost Next Page . Data ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġsend ( it ) Ġ} ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay Error () ĊĠĠĠĠĠĠĠ Ġsend ( Post Next Page . Error ( e )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġrefresh All ( ĊĠĠĠ Ġlimit Post : ĠInt , ĊĠĠĠ Ġlimit Photo : ĠInt ĊĠ Ġ): ĠObservable < Refresh > Ġ{ ĊĠĠĠ Ġreturn Ġrx Observable ( dispatch ers . main ) Ġ{ ĊĠĠĠĠĠ Ġsend ( Refresh . Refresh ing ) ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġasync 1 Ġ= Ġasync Ġ{ Ġget Posts UseCase ( limit Ġ= Ġlimit Post , Ġstart Ġ= Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġval Ġasync 2 Ġ= Ġasync Ġ{ Ġget Photos UseCase ( limit Ġ= Ġlimit Photo , Ġstart Ġ= Ġ 0 ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġsend ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRefresh . Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposts Ġ= Ġasync 1 . await (). map (:: Post VS ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphotos Ġ= Ġasync 2 . await (). map (:: Photo VS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay Error () ĊĠĠĠĠĠĠĠ Ġsend ( Refresh . Error ( e )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġsuspend Ġfun Ġdelay Error () Ġ= Ġdelay ( 0 ) Ċ }