package Ġcom . an tour age . we aver lib . screens . list Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . an tour age . we aver lib . Global Ċ import Ġcom . an tour age . we aver lib . User Cache Ċ import Ġcom . an tour age . we aver lib . other . De bounc er Ċ import Ġcom . an tour age . we aver lib . other . models . Feed Info Ċ import Ġcom . an tour age . we aver lib . other . models . Message Ċ import Ġcom . an tour age . we aver lib . other . models . Profile Response Ċ import Ġcom . an tour age . we aver lib . other . models . Stream Response Ċ import Ġcom . an tour age . we aver lib . other . networking . Resource Ċ import Ġcom . an tour age . we aver lib . other . networking . Socket Connector Ċ import Ġcom . an tour age . we aver lib . other . networking . Status Ċ import Ġcom . an tour age . we aver lib . other . networking . feed . Feed Repository Ċ import Ġcom . an tour age . we aver lib . other . networking . profile . Profile Repository Ċ import Ġcom . an tour age . we aver lib . other . room . Room Repository Ċ import Ġcom . an tour age . we aver lib . screens . base . Base ViewModel Ċ import Ġcom . an tour age . we aver lib . screens . base . Repository Ċ import Ġcom . an tour age . we aver lib . screens . list . dev _ settings . On Dev Settings Changed Listener Ċ Ċ internal Ġclass ĠVideo List ViewModel ( application : ĠApplication ) Ġ: ĠBase ViewModel ( application ), ĊĠĠĠ ĠOn Dev Settings Changed Listener , ĊĠĠĠ ĠRe ceiving Videos Manager . Re ceiving Video Callback Ġ{ ĊĊĠĠĠ Ġval Ġroom Repository : ĠRoom Repository Ġ= ĠRoom Repository . getInstance ( application ) ĊĠĠĠ Ġprivate Ġvar Ġpulled To Refresh : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġcan Refresh : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar ĠlistOf Streams : ĠMutable LiveData < List < Stream Response >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġloader LiveData : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġerror LiveData : ĠMutable LiveData < String > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġfeed Info LiveData : ĠMutable LiveData < Feed Info > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġprofile LiveData : ĠMutable LiveData < Profile Response > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġvar Ġdo Not Trigger New Button : ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġfalse Ġ// Ġto Ġprevent Ġnew Ġbutton Ġto Ġappear Ġon Ġpagination Ġfetching ĊĠĠĠ Ġprivate Ġvar Ġlive Videos : ĠMutable List < Stream Response >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġv ods : ĠList < Stream Response >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġlives To Fetch Info : ĠMutable List < Stream Response > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġprivate Ġvar Ġshow Call Result Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġlive Videos Updated Ġ= Ġfalse ĊĠĠĠ Ġvar Ġv ods Updated Ġ= Ġfalse ĊĠĠĠ Ġvar Ġv ods Updated Without Error Ġ= Ġfalse ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠV O DS _ COUNT Ġ= Ġ 1 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBE _ CHO ICE _ TIMEOUT Ġ= Ġ 4 0 0 0 L ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBE _ CHO ICE _ CL IC KS Ġ= Ġ 4 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubscribe To Live Streams ( is Initial : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Initial ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRe ceiving Videos Manager . is First Request Vod Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRe ceiving Videos Manager . is First Request Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠRe ceiving Videos Manager . set Re ceiving Video Callback ( this ) ĊĠĠĠĠĠĠĠ ĠRe ceiving Videos Manager . start Re ceiving Live Streams () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsocket Connection Observer Ġ= ĠObserver < Socket Connector . Socket Connection > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠSocket Connector . Socket Connection . DIS CONNECTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Global . network Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe To Live Streams () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlive From Socket Observer Ġ= ĠObserver < List < Stream Response >> Ġ{ Ġnew Streams Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( new Streams Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Not Trigger New Button Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos Ġ= Ġnew Streams . to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos ?. let Ġ{ Ġget Chat Poll Info For L ives ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ( live Videos ?. size Ġ?: Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos ?. get ( i )?. is Live Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! v ods Updated Without Error Ġ&& Ġv ods Updated Ġ&& Ġv ods . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Ġ{ Ġrefresh V OD s ( no Loading Placeholder Ġ= Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġv od From Socket Observer Ġ= ĠObserver < Stream Response > Ġ{ Ġnew Vod Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( new Vod Ġ!= Ġnull Ġ&& ĠFeed Repository . v ods ?. any Ġ{ Ġit . id Ġ== Ġnew Vod . id Ġ} Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Not Trigger New Button Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Stream Response >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( new Vod ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Repository . invalidate Is New Property ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Repository . v ods ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . addAll ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Repository . v ods Ġ= Ġlist . to Mutable List () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v ods ?. last ()?. id Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( list . size , ĠgetList End Place Holder ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( v ods ?. last ()?. id Ġ== Ġ- 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( list . size , Ġget Stream Loader Placeholder ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( v ods ?. isNotEmpty () Ġ== Ġtrue Ġ&& Ġv ods ?. size Ġin Ġ 1 Ġuntil ĠV O DS _ COUNT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . size , ĠgetList End Place Holder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Ġ= Ġlist ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Updated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Updated Without Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( live Videos Updated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Call Result Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Ġ{ Ġupdate Videos List () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun On Ui ( method : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Socket Listeners () Ġ{ ĊĠĠĠĠĠĠĠ ĠSocket Connector . socket Connection . remove Observer ( socket Connection Observer ) ĊĠĠĠĠĠĠĠ ĠSocket Connector . new L ives LiveData . remove Observer ( live From Socket Observer ) ĊĠĠĠĠĠĠĠ ĠSocket Connector . new Vod LiveData . remove Observer ( vod From Socket Observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlive Socket Listeners () Ġ{ ĊĠĠĠĠĠĠĠ ĠSocket Connector . clear Socket Data () ĊĠĠĠĠĠĠĠ ĠSocket Connector . socket Connection . observe Fore ver ( socket Connection Observer ) ĊĠĠĠĠĠĠĠ ĠSocket Connector . new L ives LiveData . observe Fore ver ( live From Socket Observer ) ĊĠĠĠĠĠĠĠ ĠSocket Connector . new Vod LiveData . observe Fore ver ( vod From Socket Observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh V OD s ( ĊĠĠĠĠĠĠĠ Ġcount : ĠInt Ġ= Ġ( v ods ?. size ?. minus ( 1 )) Ġ?: Ġ 0 , ĊĠĠĠĠĠĠĠ Ġno Loading Placeholder : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġv ods Count Ġ= Ġcount ĊĠĠĠĠĠĠĠ Ġif Ġ( v ods Count Ġ< ĠV O DS _ COUNT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . pul led To Refresh Ġ= Ġno Loading Placeholder ĊĠĠĠĠĠĠĠ Ġv ods Updated Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġv ods Updated Without Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠRe ceiving Videos Manager . load V OD s ( v ods Count , ĠRoom Repository . getInstance ( getApplication ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh V OD s Loc ally () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( can Refresh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult List Ġ= Ġmutable ListOf < Stream Response >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos ?. let Ġ{ Ġresult List . addAll ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġadd Bottom Loader Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġadd Jump To Top Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v ods ?. find Ġ{ Ġit . id Ġ== Ġ- 2 Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Bottom Loader Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v ods ?. find Ġ{ Ġit . id Ġ== Ġ- 1 Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Jump To Top Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Repository . v ods ?. let Ġ{ Ġ( v ods Ġas ĠMutable List < Stream Response >). addAll ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( add Jump To Top ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( v ods Ġas ĠMutable List < Stream Response >). add ( getList End Place Holder ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( add Bottom Loader ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( v ods Ġas ĠMutable List < Stream Response >). add ( get Stream Loader Placeholder ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ods ?. let Ġ{ Ġresult List . addAll ( it . toList ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Streams . post Value ( result List . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Videos List ( should Update Stop Time From DB Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcan Refresh Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Pause ( should Disconnect Socket : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Be Dialog LiveData . post Value ( false ) ĊĠĠĠĠĠĠĠ ĠnumberOf Logo Click s Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ ĠRe ceiving Videos Manager . stop Re ceiving Videos () ĊĠĠĠĠĠĠĠ Ġif Ġ( should Disconnect Socket ) ĠSocket Connector . disconnect Socket () ĊĠĠĠĠĠĠĠ Ġremove Socket Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Live Broadcast Received ( resource : ĠResource < List < Stream Response >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Re ceiving Videos Manager . is First Request Vod ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRe ceiving Videos Manager . is First Request Vod Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRe ceiving Videos Manager . pause Re ceiving Videos () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Socket Listeners () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġinit Vod Socket Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRe ceiving Videos Manager . check Should Use Sockets () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( resource . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Not Trigger New Button Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos Ġ= Ġ( resource . status . data )?. to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos ?. let Ġ{ Ġget Chat Poll Info For L ives ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ( live Videos ?. size Ġ?: Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos ?. get ( i )?. is Live Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! v ods Updated Without Error Ġ&& Ġv ods Updated Ġ&& Ġv ods . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh V OD s ( no Loading Placeholder Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos Updated Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos Updated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . post Value ( resource . status . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror LiveData . post Value ( resource . status . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon V OD Received ( resource : ĠResource < List < Stream Response >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( resource . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Not Trigger New Button Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Stream Response >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Repository . v ods ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . addAll ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew List Ġ= Ġ( resource . status . data )?. to Mutable List () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new List Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Repository . invalidate Is New Property ( new List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . addAll ( list . size , Ġnew List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Repository . v ods Ġ= Ġlist . to Mutable List () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new List ?. size Ġ== ĠV O DS _ COUNT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . size , Ġget Stream Loader Placeholder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( new List ?. size !! Ġ< ĠV O DS _ COUNT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( list . size , ĠgetList End Place Holder ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Ġ= Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Updated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Updated Without Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( live Videos Updated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Videos List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Updated Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Updated Without Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Updated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Updated Without Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloader LiveData . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . post Value ( resource . status . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror LiveData . post Value ( resource . status . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon V OD Received Initial ( resource : ĠResource < List < Stream Response >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( resource . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew List Ġ= Ġ( resource . status . data )?. to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new List Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Repository . invalidate Is New Property ( new List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Repository . v ods Ġ= Ġnew List ?. to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new List ?. size Ġ== ĠV O DS _ COUNT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew List . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew List . size , Ġget Stream Loader Placeholder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( new List ?. isNotEmpty () Ġ== Ġtrue Ġ&& Ġnew List . size Ġin Ġ 2 Ġuntil ĠV O DS _ COUNT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew List . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew List . size , ĠgetList End Place Holder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Ġ= Ġnew List Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Vod Socket Listeners () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Updated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Updated Without Error Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( live Videos Updated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Videos List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Updated Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Updated Without Error Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! pul led To Refresh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloader LiveData . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Call Result Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( live Videos Updated Ġ&& Ġv ods Updated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Videos List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Updated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ods Updated Without Error Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloader LiveData . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . post Value ( resource . status . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror LiveData . post Value ( resource . status . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh Chat Poll Info () Ġ{ ĊĠĠĠĠĠĠĠ Ġlive Videos Updated Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( live Videos Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos Updated Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos ?. let Ġ{ Ġget Chat Poll Info For L ives ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Chat Poll Info For L ives ( list : ĠList < Stream Response >) Ġ{ ĊĠĠĠĠĠĠĠ Ġlives To Fetch Info . clear () ĊĠĠĠĠĠĠĠ Ġlives To Fetch Info . addAll ( list ) ĊĠĠĠĠĠĠĠ Ġif Ġ( list . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos Updated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v ods Updated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Videos List ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Chat Poll Live Info ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Chat Poll Live Info ( stream : ĠStream Response ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġis Chat Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis Poll Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġvar Ġcomment : ĠMessage ? ĊĠĠĠĠĠĠĠ ĠRepository . get Chat Poll Info From Live Stream ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . id !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠRepository . Live Chat Poll Info Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchat Enabled : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoll Enabled : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage : ĠMessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Chat Enabled Ġ= Ġchat Enabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Poll Enabled Ġ= Ġpoll Enabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream ToUpdate Ġ= Ġlive Videos ?. filter Ġ{ Ġit . id Ġ== Ġstream . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! stream ToUpdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNull OrEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream ToUpdate [ 0 ]. is Chat Enabled Ġ= Ġis Chat Enabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream ToUpdate [ 0 ]. are Pol ls Enabled Ġ= Ġis Poll Enabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream ToUpdate [ 0 ]. last Message Ġ= Ġcomment ?. text Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream ToUpdate [ 0 ]. last Message Author Ġ= Ġcomment ?. nickname Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlives To Fetch Info . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . id Ġ== Ġstream . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Chat Enabled Ġ= Ġis Chat Enabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . are Pol ls Enabled Ġ= Ġis Poll Enabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . last Message Ġ= Ġcomment ?. text Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comment ?. userID Ġ== ĠUser Cache . getInstance ()?. getUserId () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . last Message Author Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Cache . getInstance ()?. getUser Nick Name () Ġ?: Ġmessage . nickname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . last Message Author Ġ= Ġcomment ?. nickname Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( are All Chat Poll Data Loaded ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos Updated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v ods Updated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Videos List ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= ĠMessage () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlives To Fetch Info . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . id Ġ== Ġstream . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Chat Enabled Ġ= Ġis Chat Enabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . are Pol ls Enabled Ġ= Ġis Poll Enabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . last Message Ġ= Ġcomment ?. text Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . last Message Author Ġ= Ġcomment ?. nickname Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( are All Chat Poll Data Loaded ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos Updated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v ods Updated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Videos List ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġare All Chat Poll Data Loaded (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlives To Fetch Info . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Chat Enabled Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlive Videos Updated Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Videos List ( ĊĠĠĠĠĠĠĠ Ġupdate Live Streams : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġshould Update Stop Time From DB : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( show Call Result Ġ|| Ġupdate Live Streams ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult List Ġ= Ġmutable ListOf < Stream Response >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Videos ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult List . addAll ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ods ?. let Ġ{ Ġresult List . addAll ( it . toList ()) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġloader LiveData . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Streams . post Value ( result List . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Call Result Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( should Update Stop Time From DB ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ods ?. forEach Ġ{ Ġvideo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo . stop Time Millis Ġ= Ġvideo . id ?. let Ġ{ Ġroom Repository . get Stop Time ById ( it ) Ġ} Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetList End Place Holder (): ĠStream Response Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠStream Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 , Ġnull , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġnull , Ġnull , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġfalse , Ġnull , Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Stream Loader Placeholder (): ĠStream Response Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠStream Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 2 , Ġnull , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġnull , Ġnull , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġfalse , Ġnull , Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// region Ġbackend Ġchoice ĊĊĠĠĠ Ġprivate Ġval Ġshow Be Dialog LiveData : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprivate Ġvar ĠnumberOf Logo Click s : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġbe De bounc er : ĠDe bounc er Ġ= ĊĠĠĠĠĠĠĠ ĠDe bounc er ({ ĠnumberOf Logo Click s Ġ= Ġ 0 Ġ}, ĠBE _ CHO ICE _ TIMEOUT ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Be Dialog LiveData . post Value ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Logo Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( numberOf Logo Click s Ġ>= ĠBE _ CHO ICE _ CL IC KS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Be Dialog LiveData . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Logo Click s Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe De bounc er . cancel () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Logo Click s ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( numberOf Logo Click s Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Be Dialog LiveData . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe De bounc er . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Show Be Dialog () Ġ= Ġshow Be Dialog LiveData Ġas ĠLive Data < Boolean > ĊĊĠĠĠ Ġoverride Ġfun Ġon Be Changed ( choice : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchoice . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Cache . getInstance ( getApplication < Application >(). application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . update Env Choice ( choice ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Cache . getInstance ()?. save AccessToken ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Cache . getInstance ()?. save Id Token ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Cache . getInstance ()?. save RefreshToken ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// endregion ĊĊĠĠĠ Ġfun Ġon Network G ained ( isError Shown : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( feed Info LiveData . value Ġ== Ġnull ) Ġget Feed Info () ĊĠĠĠĠĠĠĠ Ġif Ġ( profile LiveData . value Ġ== Ġnull ) Ġget Profile Info () ĊĠĠĠĠĠĠĠ Ġrefresh V OD s ( no Loading Placeholder Ġ= Ġ! isError Shown ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Network Changed ( isConnected : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe To Live Streams ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 5 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSocket Connector . disconnect Socket () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRe ceiving Videos Manager . pause While No Network () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSocket Connector . cancel Re connect () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġuser Authorized (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ!( User Cache . getInstance ( getApplication ()) ?. getId Token (). isNull Or Blank ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Cached Nick name (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUser Cache . getInstance ( getApplication ()) ?. getUser Nick Name () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Saved Tag Line (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUser Cache . getInstance ( getApplication ()) ?. getTag Line () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Saved Feed ImageUrl (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUser Cache . getInstance ( getApplication ()) ?. get Feed ImageUrl () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Feed Info () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠRepository . get Feed Info () ĊĠĠĠĠĠĠĠ Ġresponse . observe Fore ver ( object Ġ: ĠObserver < Resource < Feed Info >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( it : ĠResource < Feed Info > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresponse Status Ġ= Ġit ?. status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Status . data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeed Info Ġ= Ġresponse Status . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! feed Info . tag Line . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Cache . getInstance ( getApplication ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . save Tag Line ( feed Info . tag Line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Cache . getInstance ( getApplication ()) ?. save Tag Line ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! feed Info . imageUrl . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Cache . getInstance ( getApplication ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . save Feed ImageUrl ( feed Info . imageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Cache . getInstance ( getApplication ()) ?. save Feed ImageUrl ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Info LiveData . post Value ( feed Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . remove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . remove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Profile Info () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! User Cache . getInstance ()?. getId Token (). isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠProfile Repository . get Profile () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . observe Fore ver ( object Ġ: ĠObserver < Resource < Profile Response >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( it : ĠResource < Profile Response > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresponse Status Ġ= Ġit ?. status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Status . data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprofile Ġ= Ġresponse Status . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Cache . getInstance ()?. save User Nick Name ( profile . nickname Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Cache . getInstance ()?. save User Image ( profile . imageUrl Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Cache . getInstance ()?. save UserId ( profile . id Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile LiveData . post Value ( profile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . remove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . remove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }