package Ġcom . s ung bin . music inform ator . paging . artist Ċ Ċ import Ġandroidx . paging . Page Key ed DataSource Ċ import Ġcom . s ung bin . music inform ator .` interface `. Gen ius Interface Ċ import Ġcom . s ung bin . music inform ator . database . Artist Database Ċ import Ġcom . s ung bin . music inform ator . di . D agger Gen ius Component Ċ import Ġcom . s ung bin . music inform ator . model . Artist Item Ċ import Ġcom . s ung bin . music inform ator . util . Log Utils Ċ import Ġcom . s ung bin . music inform ator . util . Parse Utils Ċ import Ġcom . s ung bin . music inform ator . util . manager . Type Manager . AR TI ST Ċ import Ġio . reactivex . rx java 3 . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . rx java 3 . schedul ers . Schedulers Ċ import Ġkotlinx . coroutines .* Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Named Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠS ung Bin Ġon Ġ 2 0 2 0 - 0 8 - 0 1 . Ċ Ġ*/ Ċ Ċ class ĠArtist DataSource ( ĊĠĠĠ Ġprivate Ġval Ġsort Type : ĠString , ĊĠĠĠ Ġprivate Ġval Ġper Page : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġquery : ĠString , ĊĠĠĠ Ġprivate Ġval Ġartist Database : ĠArtist Database Ċ ) Ġ: ĠPage Key ed DataSource < Int , ĠArtist Item >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġpage Ġ= Ġ 1 ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġ@ Named (" BASE ") ĊĠĠĠ Ġlateinit Ġvar Ġclient : ĠRet rofit ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠD agger Gen ius Component . builder (). build (). inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclient ( callback : Ġ( List < Artist Item >) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Utils . log ( AR TI ST , Ġsort Type , Ġper Page , Ġif Ġ( page Ġ<= Ġ 0 ) Ġ 1 Ġelse Ġpage , Ġquery ) ĊĠĠĠĠĠĠĠ Ġartist Database . artist Dao (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . getItem ( page ). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( Gen ius Interface :: class . java ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Search Data ( AR TI ST , Ġsort Type , Ġper Page , Ġif Ġ( page Ġ<= Ġ 0 ) Ġ 1 Ġelse Ġpage , Ġquery ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . computation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĠjsonObject Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Main ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParse Utils . get Artist Search Data ( jsonObject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġitem . await () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . insert ( value /* , Ġpage */) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . log ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . log (" room Ġ- Ġempty Ġ= Ġ$ page ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( it . getItem ( page )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . log (" room Ġ- Ġget Ġitem Ġ= Ġ$ page ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Initial ( ĊĠĠĠĠĠĠĠ Ġparams : ĠLoad Initial Params < Int >, ĊĠĠĠĠĠĠĠ Ġcallback : ĠLoad Initial Callback < Int , ĠArtist Item > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclient Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( it , Ġ 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . log (" called Ġinit ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload After ( ĊĠĠĠĠĠĠĠ Ġparams : ĠLoad Params < Int >, ĊĠĠĠĠĠĠĠ Ġcallback : ĠLoad Callback < Int , ĠArtist Item > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( page Ġ+ Ġ 1 Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( it , Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Before ( ĊĠĠĠĠĠĠĠ Ġparams : ĠLoad Params < Int >, ĊĠĠĠĠĠĠĠ Ġcallback : ĠLoad Callback < Int , ĠArtist Item > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( page Ġ- Ġ 1 Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( it , Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . log (" called Ġbefore ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }