package Ġcom . l cy er . sw it . data Ċ Ċ import Ġandroidx . paging . Paging Source Ċ import Ġandroidx . paging . Paging State Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠUser Paging DataSource ( ĊĠĠĠ Ġprivate Ġval Ġgithub Api : ĠGithub Api , ĊĠĠĠ Ġprivate Ġval Ġuser Dao : ĠUser Dao Ċ ) Ġ: ĠP aging Source < Int , ĠUser >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Refresh Key ( state : ĠP aging State < Int , ĠUser >): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠLoad Params < Int >): ĠLoad Result < Int , ĠUser > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusers Ġ= Ġgithub Api . get Users ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsince Ġ= Ġparams . key Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Mark Users Ġ= Ġuser Dao ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Users () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . book _ mark Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġusers . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Mark Users . forEach Ġ{ Ġbook Mark User Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . id Ġ== Ġbook Mark User . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . book _ mark Ġ= Ġbook Mark User . book _ mark ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Dao . insert All ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusers , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġparams . key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġusers [ users . size Ġ- Ġ 1 ]. id ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }