package Ġcom . must afa . movie guide app . repository Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . must afa . movie guide app . api . ApiResponse Ċ import Ġcom . must afa . movie guide app . api . Tv Service Ċ import Ġcom . must afa . movie guide app . map pers . Keyword Paging Checker Ċ import Ġcom . must afa . movie guide app . map pers . Review Paging Checker Ċ import Ġcom . must afa . movie guide app . map pers . Video Paging Checker Ċ import Ġcom . must afa . movie guide app . models . Keyword Ċ import Ġcom . must afa . movie guide app . models . Resource Ċ import Ġcom . must afa . movie guide app . models . Review Ċ import Ġcom . must afa . movie guide app . models . Video Ċ import Ġcom . must afa . movie guide app . models . network . Keyword ListResponse Ċ import Ġcom . must afa . movie guide app . models . network . Review ListResponse Ċ import Ġcom . must afa . movie guide app . models . network . Video ListResponse Ċ import Ġcom . must afa . movie guide app . room . Tv Dao Ċ import Ġcom . must afa . movie guide app . view . ui . common . App Executors Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠT v Repository Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġservice : ĠT v Service , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtv Dao : ĠT v Dao , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapp Executors : ĠApp Executors ) ĊĠĠĠĠ Ġ{ ĊĊĊĠĠĠ Ġfun Ġload Keyword List ( id : ĠInt ): ĠLive Data < Resource < List < Keyword >>> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠNetwork Bound Resource < ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList < Keyword >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyword ListResponse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyword Paging Checker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ>( app Executors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsave Call Result ( items : ĠKeyword ListResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= Ġtv Dao . get Tv ( id _ Ġ= Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . keywords Ġ= Ġitems . keywords ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Dao . update Tv ( tv Ġ= Ġtv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Fetch ( data : ĠList < Keyword >? ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata Ġ== Ġnull Ġ|| Ġdata . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload From Db (): ĠLive Data < List < Keyword >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie Ġ= Ġtv Dao . get Tv ( id _ Ġ= Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata : ĠMutable LiveData < List < Keyword >> Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġmovie . keywords ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpage Checker (): ĠKeyword Paging Checker Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKeyword Paging Checker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Call (): ĠLive Data < ApiResponse < Keyword ListResponse >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġservice . fetch Keywords ( id Ġ= Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. as LiveData () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Video List ( id : ĠInt ): ĠLive Data < Resource < List < Video >>> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠNetwork Bound Resource < ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList < Video >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVideo ListResponse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVideo Paging Checker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ>( app Executors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsave Call Result ( items : ĠVideo ListResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= Ġtv Dao . get Tv ( id _ Ġ= Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . videos Ġ= Ġitems . results ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Dao . update Tv ( tv Ġ= Ġtv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Fetch ( data : ĠList < Video >? ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata Ġ== Ġnull Ġ|| Ġdata . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload From Db (): ĠLive Data < List < Video >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie Ġ= Ġtv Dao . get Tv ( id _ Ġ= Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata : ĠMutable LiveData < List < Video >> Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġmovie . videos ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpage Checker (): ĠVideo Paging Checker Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVideo Paging Checker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Call (): ĠLive Data < ApiResponse < Video ListResponse >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġservice . fetch Videos ( id Ġ= Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. as LiveData () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Reviews List ( id : ĠInt ): ĠLive Data < Resource < List < Review >>> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠNetwork Bound Resource < ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList < Review >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReview ListResponse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReview Paging Checker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ>( app Executors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsave Call Result ( items : ĠReview ListResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= Ġtv Dao . get Tv ( id _ Ġ= Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . reviews Ġ= Ġitems . results ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Dao . update Tv ( tv Ġ= Ġtv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Fetch ( data : ĠList < Review >? ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata Ġ== Ġnull Ġ|| Ġdata . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload From Db (): ĠLive Data < List < Review >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie Ġ= Ġtv Dao . get Tv ( id _ Ġ= Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata : ĠMutable LiveData < List < Review >> Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġmovie . reviews ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpage Checker (): ĠReview Paging Checker Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠReview Paging Checker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Call (): ĠLive Data < ApiResponse < Review ListResponse >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġservice . fetch Reviews ( id Ġ= Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. as LiveData () ĊĠĠĠ Ġ} Ċ } Ċ