package Ġio . github . mk lk j . film owy . ui . film . episodes . tab Ċ Ċ import Ġandroidx . core . text . is Digits Only Ċ import Ġandroidx . h ilt . lifecycle . ViewModel Inject Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġio . github . mk lk j . film owy . api . Network State Ċ import Ġio . github . mk lk j . film owy . api . pojo . Film Episode Ċ import Ġio . github . mk lk j . film owy . api . pojo . Film Full Info Ċ import Ġio . github . mk lk j . film owy . api . repository . Film Repository Ċ import Ġio . github . mk lk j . film owy . base . Base ViewModel Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠEp isode s Tab ViewModel Ġ@ ViewModel Inject Ġconstructor ( private Ġval Ġfilm Repository : ĠFil m Repository ) Ġ: ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfilm : ĠFil m Full Info ĊĊĠĠĠ Ġprivate Ġvar Ġseason Ġ= Ġ 0 ĊĊĠĠĠ Ġval Ġepisode s Ġ= ĠMutable LiveData < List < Film Episode >>() ĊĊĠĠĠ Ġfun Ġload Episode s ( film : ĠFil m Full Info , Ġseason : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . film Ġ= Ġfilm ĊĠĠĠĠĠĠĠ Ġthis . season Ġ= Ġseason ĊĠĠĠĠĠĠĠ Ġdis posable . add ( film Repository . get Film Season User Votes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilm Id Ġ= Ġfilm . film Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseason Ġ= Ġif Ġ( film . se asons Count Ġ== Ġ 1 ) Ġfilm . year ?. take If Ġ{ Ġit . is Digits Only () Ġ} ?. toInt () Ġ?: Ġ 0 Ġelse Ġseason ĊĠĠĠĠĠĠĠ Ġ). flatMap Ġ{ Ġvotes Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( film . se asons Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġfilm Repository . get Film Episode s ( film . url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfilm Repository . get Film Season Episode s ( film . url , Ġseason ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . map Ġ{ Ġit . copy ( rate Ġ= Ġvotes . vote ?. votes ?. getOrElse ( it . id . toString ()) Ġ{ Ġ- 1 Ġ} Ġ?: Ġ- 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġnetwork State . post Value ( Network State . LOADING ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġepisode s . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork State . post Value ( Network State . LOADED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork State . post Value ( Network State . error ( it . message )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmark Season As W atched () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis posable . add ( film Repository . vote For Season ( film . film Id , Ġseason , Ġrate Ġ= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" V oted Ġsuccessfully !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Episode s ( film , Ġseason ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Vote ( film : ĠFil m Full Info , Ġseason : ĠInt , Ġid : ĠInt , Ġrate : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdis posable . add ( film Repository . vote For Episode ( id , Ġrate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" V oted Ġsuccessfully !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Episode s ( film , Ġseason ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ