package Ġcom . c zech . mu v ies . view Models Ċ Ċ import Ġandroidx . lifecycle .* Ċ import Ġandroidx . paging . Live Paged List Builder Ċ import Ġandroidx . paging . Paged List Ċ import Ġcom . c zech . mu v ies . Build Config Ċ import Ġcom . c zech . mu v ies . LANGUAGE Ċ import Ġcom . c zech . mu v ies . data Sources . Similar Movies DataSource Factory Ċ import Ġcom . c zech . mu v ies . models . Similar Movies Ċ import Ġcom . c zech . mu v ies . network . Movies ApiService Ċ import Ġcom . c zech . mu v ies . utils . Resource Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġjava . lang . Exception Ċ Ċ class ĠMovie Details ViewModel ( private Ġval Ġapi Service : ĠMov ies ApiService ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġfun Ġget Movie Details ( movie _ id : ĠInt ) Ġ= Ġlive Data ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġemit ( Resource . loading ( data Ġ= Ġnull )) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Resource . success ( data Ġ= Ġapi Service . get Movie Details ( movie _ id , ĠBuild Config . API _ KEY , ĠLANGUAGE ))) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Resource . error ( data Ġ= Ġnull , Ġmessage Ġ= Ġe . message Ġ?: Ġ" Error Ġgetting Ġmovie Ġdetails ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Cast ( movie _ id : ĠInt ) Ġ= Ġlive Data ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġemit ( Resource . loading ( data Ġ= Ġnull )) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Resource . success ( data Ġ= Ġapi Service . get Movie Credits ( movie _ id , ĠBuild Config . API _ KEY ))) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Resource . error ( data Ġ= Ġnull , Ġmessage Ġ= Ġe . message Ġ?: Ġ" Error Ġgetting Ġmovie Ġcast ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠpageSize Ġ= Ġ 1 0 0 0 ĊĠĠĠ Ġval Ġconfig Ġ= ĠP aged List . Config . Builder () ĊĠĠĠĠĠĠĠ Ġ. set PageSize ( pageSize ) ĊĠĠĠĠĠĠĠ Ġ. set Enable Place holders ( false ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġfun Ġget Similar Movies ( movie Id : ĠInt ): ĠLive Data < Paged List < Similar Movies . Similar Movies Result >> Ġ= ĠLive Paged List Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimilar Movies DataSource Factory ( api Service , ĠDispatch ers . IO , Ġmovie Id ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig ĊĠĠĠĠĠĠĠ Ġ). build () Ċ } Ċ Ċ class ĠMovie Details ViewModel Factory ( private Ġval Ġapi Service : ĠMov ies ApiService ): ĠViewModel Provider . Factory Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġ< T : ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( model Class . isAssignableFrom ( Movie Details ViewModel :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMovie Details ViewModel ( api Service ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unknown Ġclass Ġname ") ĊĠĠĠ Ġ} Ċ }