package Ġcom . simple . firebase . chat . app . datasource . paging source Ċ Ċ import Ġandroidx . paging . Paging Source Ċ import Ġandroidx . paging . Paging State Ċ import Ġcom . google . firebase . firestore . Document Snapshot Ċ import Ġcom . google . firebase . firestore . Listener Registration Ċ import Ġcom . simple . firebase . chat . app . constants . Config Ċ import Ġcom . simple . firebase . chat . app . datasource . repo . Firebase Repo Ċ import Ġcom . simple . firebase . chat . app . model . User Ċ import Ġkotlinx . coroutines . delay Ċ import Ġjava . lang . Exception Ċ Ċ class ĠUsers Paging DataSource ( ĊĠĠĠ Ġprivate Ġval Ġfirebase Repo : ĠFirebase Repo , ĊĠĠĠ Ġprivate Ġval Ġstart With Query : ĠString Ċ ) Ġ: ĊĠĠĠ ĠP aging Source < Document Snapshot , ĠUser >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġregist rations Ġ= Ġmutable ListOf < Listener Registration >() ĊĠĠĠ Ġoverride Ġfun Ġget Refresh Key ( state : ĠP aging State < Document Snapshot , ĠUser >): ĠDocument Snapshot ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠLoad Params < Document Snapshot >): ĠLoad Result < Document Snapshot , ĠUser > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusers List Ġ= Ġmutable ListOf < User >() ĊĠĠĠĠĠĠĠ Ġvar Ġlast Document Snapshot : ĠDocument Snapshot ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( start With Query . trim (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdone Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠonSuccess Ġ= Ġ{ Ġlast Snapshot : ĠDocument Snapshot ?, Ġusers : ĠList < User > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers List . addAll ( users ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Document Snapshot Ġ= Ġlast Snapshot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġon Failure Ġ= Ġ{ Ġ_: ĠException Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġregist rations . forEach Ġ{ Ġit . remove () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregist rations . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Repo . get Users Via Snapshot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart With Query , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfig . USERS _ LIST _ SIZE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! done ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( Config . P AGING _ DATA _ SOURCE _ SNAPSHOT _ DELAY _ WAIT ING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Page ( users List , Ġparams . key , Ġlast Document Snapshot ) ĊĠĠĠ Ġ} Ċ }