package Ġcom . sky do ves . the movies . repository Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . sky do ves . the movies . api . ApiResponse Ċ import Ġcom . sky do ves . the movies . api . People Service Ċ import Ġcom . sky do ves . the movies . map pers . People Response Mapper Ċ import Ġcom . sky do ves . the movies . map pers . Person Detail Response Mapper Ċ import Ġcom . sky do ves . the movies . models . Resource Ċ import Ġcom . sky do ves . the movies . models . entity . Person Ċ import Ġcom . sky do ves . the movies . models . network . People Response Ċ import Ġcom . sky do ves . the movies . models . network . Person Detail Ċ import Ġcom . sky do ves . the movies . room . People Dao Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ /** Ċ Ġ* ĠDevelop ed Ġby Ġsky do ves Ġon Ġ 2 0 1 8 - 0 8 - 1 5 . Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 Ġsky do ves Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ @ Singleton Ċ class ĠPeople Repository Ġ@ Inject Ċ constructor ( val Ġpeople Service : ĠPeople Service , Ġval Ġpeople Dao : ĠPeople Dao ) ĊĠĠĠ Ġ: ĠRepository Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Injection ĠPeople Repository ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload People ( page : ĠInt ): ĠLive Data < Resource < List < Person >>> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠNetwork Bound Repository < List < Person >, ĠPeople Response , ĠPeople Response Mapper >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsave Fetch Data ( items : ĠPeople Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġitems . results ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . page Ġ= Ġpage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpeople Dao . insert People ( items . results ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Fetch ( data : ĠList < Person >? ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata Ġ== Ġnull Ġ|| Ġdata . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload From Db (): ĠLive Data < List < Person >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpeople Dao . get People ( page _ Ġ= Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfetch Service (): ĠLive Data < ApiResponse < People Response >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpeople Service . fetch Pop ular People ( page Ġ= Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmapper (): ĠPeople Response Mapper Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPeople Response Mapper () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fetch Failed ( message : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" on Fetch Failed Ġ: Ġ$ message ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. as LiveData () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Person Detail ( id : ĠInt ): ĠLive Data < Resource < Person Detail >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠNetwork Bound Repository < Person Detail , ĠPerson Detail , ĠPerson Detail Response Mapper >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsave Fetch Data ( items : ĠPerson Detail ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperson Ġ= Ġpeople Dao . get Person ( id _ Ġ= Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperson . person Detail Ġ= Ġitems ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpeople Dao . update Person ( person Ġ= Ġperson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Fetch ( data : ĠPerson Detail ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata Ġ== Ġnull Ġ|| Ġdata . bio graphy . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload From Db (): ĠLive Data < Person Detail > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperson Ġ= Ġpeople Dao . get Person ( id _ Ġ= Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata : ĠMutable LiveData < Person Detail > Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġperson . person Detail ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfetch Service (): ĠLive Data < ApiResponse < Person Detail >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpeople Service . fetch Person Detail ( id Ġ= Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmapper (): ĠPerson Detail Response Mapper Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPerson Detail Response Mapper () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fetch Failed ( message : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" on Fetch Failed Ġ: Ġ$ message ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. as LiveData () ĊĠĠĠ Ġ} Ċ } Ċ