package Ġde . jb amber ger . api . provider . reddit Ċ Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġde . jb amber ger . api . Absent LiveData Ċ import Ġde . jb amber ger . api . App Executors Ċ import Ġde . jb amber ger . api . Resource Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ /** Ċ Ġ* Ġ@ author ĠJ ann ik ĠB amber ger Ġ( dev . jb amber ger @ gmail . com ) Ċ Ġ*/ Ċ @ Singleton Ċ class ĠRed dit Repository Ġ@ Inject Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapi : ĠRed dit Api , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġexecutor : ĠApp Executors , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġre dd it Post Dao : ĠRed dit Post Dao ) Ġ{ ĊĊĠĠĠ Ġfun Ġget Posts () Ġ: ĠLive Data < Resource < List < Red dit Post >> ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAbs ent LiveData . create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Red dit Post ( sub reddit : ĠString ): ĠLive Data < Red dit Post > Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh Red dit Posts ( sub reddit ) ĊĠĠĠĠĠĠĠ Ġreturn Ġre dd it Post Dao . load ( sub reddit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Red dit Posts ( sub reddit : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecutor . network IO . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Exists Ġ= Ġfalse // reddit Post Dao . has Red dit Post ( TIMEOUT ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! post Exists ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi . get Posts ( sub reddit ). enqueue ( object Ġ: ĠCallback < Red dit Post > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < Red dit Post >, Ġresponse : ĠResponse < Red dit Post >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġerror Ġcase Ġis Ġleft Ġout Ġfor Ġb rev ity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . disk IO . execute Ġ{ Ġre dd it Post Dao . save ( response . body () !! ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Red dit Post >, Ġt : ĠThrowable ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ