package Ġcom . b als ik and ar . github . data . network Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġcom . b als ik and ar . github . data . Trend ing Repo Ċ import Ġcom . b als ik and ar . github . data . db . Db Entity Mapper Ċ import Ġcom . b als ik and ar . github . data . db . Trend ing Repo DB Ċ import Ġcom . b als ik and ar . github . data . db . Trend ing Repo Dao Ċ import Ġcom . b als ik and ar . github . data . sync . I Server Ċ import Ġcom . b als ik and ar . github . use cases . Has Two Hours Passed Ċ import Ġcom . b als ik and ar . github . utils . Thread Utils Ċ import Ġio . reactivex . Observable Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠT rend ing Repository Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġtrend ing Repo Dao : ĠT rend ing Repo Dao , ĊĠĠĠ Ġprivate Ġval Ġshared Preferences : ĠSharedPreferences , ĊĠĠĠ Ġprivate Ġval Ġapi Service : ĠApi Service Ċ ) Ġ: ĠI Server Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Trend ing Repos (): ĠObservable < Mutable List < Trend ing Repo >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Has Two Hours Passed (). execute ( getLast Call Time ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Trend ing Repos From Server () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( trend ing Repo Dao . trend ing Repo List (). blocking First (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Trend ing Repos From Server () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrend ing Repo Dao . trend ing Repo List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Thread Utils . database ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Thread Utils . worker ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrepo List Ġ= Ġmutable ListOf < Trend ing Repo >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( repo Ġin Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo List . add ( Db Entity Mapper . convert ( repo )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġrepo List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Observable () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetLast Call Time (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlast Call Time Ġ= Ġshared Preferences . getLong (" last _ call _ time ", Ġ 0 L ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlast Call Time ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Trend ing Repos From Server (): ĠObservable < Mutable List < Trend ing Repo >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapi Service . get Trend ing Repos () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Thread Utils . api ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Thread Utils . worker ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġit . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠError . parse ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrend ing Repos DB Ġ= Ġmutable ListOf < Trend ing Repo DB >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( repo Ġin Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrend ing Repos DB . add ( Api Entity Mapper . convert ( repo )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrend ing Repo Dao . insert (* trend ing Repos DB . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrepo List Ġ= Ġmutable ListOf < Trend ing Repo >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( repo Ġin Ġtrend ing Repos DB ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo List . add ( Db Entity Mapper . convert ( repo )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). put Long (" last _ call _ time ", ĠSystem . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġrepo List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Observable () ĊĠĠĠ Ġ} Ċ Ċ }