/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠGoogle , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġapp . t ivi . show details . episode details Ċ Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġapp . t ivi . inter actors . Add Episode Watch Ċ import Ġapp . t ivi . inter actors . Remove Episode W atches Ċ import Ġapp . t ivi . inter actors . Update Episode Details Ċ import Ġapp . t ivi . inter actors . Update Episode W atches Ċ import Ġapp . t ivi . show details . episode details . Episode Details ViewState . Action Ċ import Ġapp . t ivi . t mdb . T mdb Manager Ċ import Ġapp . t ivi . util . Logger Ċ import Ġapp . t ivi . util . T ivi ViewModel Ċ import Ġio . reactivex . Flow able Ċ import Ġio . reactivex . rx kotlin . Flow ables Ċ import Ġio . reactivex . rx kotlin . plus Assign Ċ import Ġorg . th reet en . bp . Offset DateTime Ċ import Ġorg . th reet en . bp . format . DateTime Formatter Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠEp isode Details ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġupdate Episode Details : ĠUpdate Episode Details , ĊĠĠĠ Ġprivate Ġval Ġupdate Episode W atches : ĠUpdate Episode W atches , ĊĠĠĠ Ġprivate Ġval Ġadd Episode Watch : ĠAdd Episode Watch , ĊĠĠĠ Ġprivate Ġval Ġremove Episode W atches : ĠRemove Episode W atches , ĊĠĠĠ Ġprivate Ġval Ġt mdb Manager : ĠT mdb Manager , ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger , ĊĠĠĠ Ġprivate Ġval ĠdateTime Formatter : ĠDateTime Formatter Ċ ) Ġ: ĠT ivi ViewModel () Ġ{ ĊĊĠĠĠ Ġvar Ġepisode Id : ĠLong ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ data Ġ= ĠMutable LiveData < Episode Details ViewState >() ĊĠĠĠ Ġval Ġdata : ĠLive Data < Episode Details ViewState > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ data ĊĊĠĠĠ Ġfun Ġsetup ( episode Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Episode Details . set Params ( Update Episode Details . Params ( episode Id )) ĊĠĠĠĠĠĠĠ Ġupdate Episode W atches . set Params ( Update Episode W atches . Params ( episode Id )) ĊĊĠĠĠĠĠĠĠ Ġdis pos ables . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġw atches Ġ= Ġupdate Episode W atches . observe (). share () ĊĊĠĠĠĠĠĠĠ Ġdis pos ables Ġ+= ĠFlow ables . combine Latest ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Episode Details . observe (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw atches , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt mdb Manager . image Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw atches . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isEmpty ()) Ġ{ ĠAction . WATCH Ġ} Ġelse Ġ{ ĠAction . UN WATCH Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFlow able . just ( dateTime Formatter ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: Episode Details ViewState ĊĠĠĠĠĠĠĠ Ġ). subscribe (_ data :: post Value , Ġlogger :: e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġep Id Ġ= Ġepisode Id ĊĠĠĠĠĠĠĠ Ġif Ġ( ep Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Interactor ( update Episode Details , ĠUpdate Episode Details . Execute Params ( true )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Interactor ( update Episode W atches , ĠUpdate Episode W atches . Execute Params ( true )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ data . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmark W atched () Ġ{ ĊĠĠĠĠĠĠĠ Ġepisode Id ?. also Ġ{ Ġlaunch Interactor ( add Episode Watch , ĠAdd Episode Watch . Params ( it , ĠOffset DateTime . now ())) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmark Un w atched () Ġ{ ĊĠĠĠĠĠĠĠ Ġepisode Id ?. also Ġ{ Ġlaunch Interactor ( remove Episode W atches , ĠRemove Episode W atches . Params ( it )) Ġ} ĊĠĠĠ Ġ} Ċ }