package Ġcom . sh ah in . me ister search . data . remote . sources . paging . search Ċ Ċ import Ġcom . sh ah in . me ister search . data . remote . models . body . Filter Body Ċ import Ġcom . sh ah in . me ister search . data . remote . models . response . search . items . Task Result Ċ import Ġcom . sh ah in . me ister search . data . remote . sources . paging . Paging DataSource Ċ import Ġcom . sh ah in . me ister search . general . paging . Base Paging Source Ċ import Ġretrofit 2 . HttpException Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠP aging ĠSource Ċ Ġ* ĠResp ons ible Ġfor Ġhandling Ġse am less Ġpag inated Ġapi Ġcalls Ċ Ġ* Ċ Ġ* ĠThis Ġsource Ġclass Ġdoes Ġnot Ġhandle Ġany ĠDB Ġprocess Ċ Ġ* Ġand Ġonly Ġis Ġdesigned Ġto Ġreturn Ġa Ġstream Ġof Ġpag inated Ġapi Ġresponses Ċ Ġ* Ċ Ġ* ĠP aging Ġ 3 Ġalso Ġprovides ĠRemote Mediator ĠHelper Ġclass Ġto Ġuse Ġto Ġintegrate Ċ Ġ* Ġa Ġcombined Ġflow Ġof ĠNetwork Ġ& ĠDB Ġdata Ċ Ġ* Ġ@ see ĠSearch Remote Mediator Ċ Ġ* Ċ Ġ* Ġ*** Extended Ġfrom Ġ[ Base Paging Source ] Ġwhich Ġprovides Ġbasic Ġbehaviour *** Ċ Ġ* Ċ Ġ* ĠReturns Ġ[ Flow ] Ġof Ġ[ Task Result ] Ċ Ġ*/ Ċ class ĠSearch Paging Repository ( ĊĠĠĠ Ġprivate Ġval Ġfilter Body : ĠFilter Body , ĊĠĠĠ Ġprivate Ġval Ġpaging DataSource : ĠP aging DataSource Ċ ) Ġ: ĠBase Paging Source < Task Result >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġstart Page Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġval Ġlimit Ġ= Ġ 5 0 ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠLoad Params < Int >): ĠLoad Result < Int , ĠTask Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġparams . key Ġ?: Ġstart Page ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġpaging DataSource . search ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Body , Ġposition , Ġlimit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresponse . body () Ġ?: Ġreturn ĠLoad Result . Error ( Throwable (" No ĠData ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtasks Ġ= Ġbody . search Result . tasks ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Results Ġ= Ġ( body . paging Result . total Results Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġtasks , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġif Ġ( position Ġ== Ġstart Page ) Ġnull Ġelse Ġposition Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġif Ġ( total Results Ġ== Ġ 0 Ġ|| Ġposition Ġ* Ġlimit Ġ> Ġtotal Results ) Ġnull Ġelse Ġposition Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Error ( exception ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠHttp Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Error ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }