package Ġcom . my company . my . challenge . datasource Ċ Ċ import Ġandroidx . paging . Position al DataSource Ċ import Ġcom . my company . my . challenge . api . Ret rofit Client Ċ import Ġcom . my company . my . challenge . models . Comment Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ Ċ class ĠComment DataSource ( load Callback : Ġ( Boolean ) Ġ-> ĠUnit , Ġfrom ID : ĠInt , Ġto ID : ĠInt ) Ġ: ĠPosition al DataSource < Comment >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcomment List : ĠMutable List < Comment > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġval Ġload Ġ= Ġload Callback ĊĠĠĠ Ġprivate Ġval Ġm To ID Ġ= Ġto ID ĊĠĠĠ Ġprivate Ġvar Ġcurrent Id Ġ= Ġfrom ID ĊĊĠĠĠ Ġoverride Ġfun Ġload Range ( params : ĠLoad Range Params , Ġcallback : ĠLoad Range Callback < Comment >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( params . start Position Ġ+ Ġparams . load Size Ġ> Ġcomment List . size ) Ġreturn ĊĠĠĠĠĠĠĠ Ġload . invoke ( true ) ĊĠĠĠĠĠĠĠ Ġcallback . on Result ( comment List . sub List ( params . start Position , Ġparams . start Position + params . load Size )) ĊĠĠĠĠĠĠĠ Ġload . invoke ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Initial ( params : ĠLoad Initial Params , Ġcallback : ĠLoad Initial Callback < Comment >) Ġ{ ĊĠĠĠĠĠĠĠ Ġload . invoke ( true ) ĊĠĠĠĠĠĠĠ Ġget Comments ( callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Comments ( callback : ĠLoad Initial Callback < Comment > ){ ĊĊĠĠĠĠĠĠĠ ĠRet rofit Client (). api Service . get Comments By Post Id ( current Id ). enqueue ( object Ġ: ĠCallback < Mutable List < Comment >> { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Mutable List < Comment >>, Ġt : ĠThrowable ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall : ĠCall < Mutable List < Comment >>, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠResponse < Mutable List < Comment >> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( current Id Ġ< Ġm To ID ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( response . body () Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment List . addAll ( response . body () !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Id ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Comments ( callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( response . body () Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomments Response Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comments Response Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment List . addAll ( comments Response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomments Response ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . size Ġ>= Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( comment List . sub List ( 0 , Ġ 1 0 ), Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( comment List . sub List ( 0 , Ġit . size ), Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload . invoke ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }