package Ġcom . mov ied b . discover . data Ċ Ċ import Ġandroidx . paging . Paging Source Ċ import Ġcom . mov ied b . common . domain . model . Movie Ċ import Ġcom . mov ied b . core . Build Config Ċ import Ġcom . mov ied b . discover . data . remote . Discover Service Ċ import Ġretrofit 2 . HttpException Ċ import Ġjava . io . IOException Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠWorks Ġwith Ġthe ĠDis cover Ġto Ġget Ġdata . Ċ Ġ*/ Ċ class ĠDis cover Remote DataSource Ġ@ Inject Ġconstructor ( private Ġval Ġservice : ĠDis cover Service ) Ġ: ĊĠĠĠ ĠP aging Source < Int , ĠMovie >() Ġ{ ĊĠĠĠ Ġprivate Ġval ĠSTART ING _ PAGE _ INDEX Ġ= Ġ 1 ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠLoad Params < Int >): ĠLoad Result < Int , ĠMovie > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġparams . key Ġ?: ĠSTART ING _ PAGE _ INDEX ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġservice . get Movies List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Config . API _ DE VELO PER _ TOKEN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" en ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" pop ularity . desc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" false ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" true ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmovies : ĠList < Movie > Ġ= Ġarray ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Ġ= Ġbody . results Ġ?: Ġarray ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġmovies , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġif Ġ( position Ġ== ĠSTART ING _ PAGE _ INDEX ) Ġnull Ġelse Ġposition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġif Ġ( movies . isEmpty ()) Ġnull Ġelse Ġposition Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Error ( exception ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠHttp Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Error ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* suspend Ġfun Ġfetch Data ( page : Int ) Ġ= Ġexecute Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . get Movies List ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Config . API _ DE VELO PER _ TOKEN , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" en ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" pop ularity . desc ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" true ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" true ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}*/ Ċ Ċ }