package Ġio . github . d roid ka igi . conf sched 2 0 1 9 . session . ui . store Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mediator LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . shop ify . li ved ata k tx . combine With Ċ import Ġcom . shop ify . li ved ata k tx . map Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 9 . action . Action Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 9 . dispatcher . Dispatcher Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 9 . ext . android . require Value Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 9 . ext . android . to LiveData Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 9 . ext . android . to Single LiveData Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 9 . model . Filters Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 9 . model . Session Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 9 . model . Session Page Ċ import Ġkotlinx . coroutines . channels . map Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠSession Pages Store Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġdispatcher : ĠDispatcher Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsessions : ĠLive Data < List < Session >> Ġ= Ġdispatcher ĊĠĠĠĠĠĠĠ Ġ. subscribe < Action . Sessions Loaded >() ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . sessions Ġ} ĊĠĠĠĠĠĠĠ Ġ. to LiveData ( listOf ()) ĊĊĠĠĠ Ġprivate Ġval Ġroom Filter Changed Ġ= Ġdispatcher ĊĠĠĠĠĠĠĠ Ġ. subscribe < Action . Room Filter Changed >() ĊĠĠĠĠĠĠĠ Ġ. to LiveData () ĊĊĠĠĠ Ġprivate Ġval Ġcategory Filter Changed Ġ= Ġdispatcher ĊĠĠĠĠĠĠĠ Ġ. subscribe < Action . Category Filter Changed >() ĊĠĠĠĠĠĠĠ Ġ. to LiveData () ĊĊĠĠĠ Ġprivate Ġval Ġlang Filter Changed Ġ= Ġdispatcher ĊĠĠĠĠĠĠĠ Ġ. subscribe < Action . Lang Filter Changed >() ĊĠĠĠĠĠĠĠ Ġ. to LiveData () ĊĊĠĠĠ Ġprivate Ġval Ġlang Support Filter Changed Ġ= Ġdispatcher ĊĠĠĠĠĠĠĠ Ġ. subscribe < Action . Lang Support Filter Changed >() ĊĠĠĠĠĠĠĠ Ġ. to LiveData () ĊĊĠĠĠ Ġprivate Ġval Ġaudience Category Filter Changed Ġ= Ġdispatcher ĊĠĠĠĠĠĠĠ Ġ. subscribe < Action . Audience Category Filter Changed >() ĊĠĠĠĠĠĠĠ Ġ. to LiveData () ĊĊĠĠĠ Ġprivate Ġval Ġfilter Cle ared Ġ= Ġdispatcher ĊĠĠĠĠĠĠĠ Ġ. subscribe < Action . Filter Cle ared >() ĊĠĠĠĠĠĠĠ Ġ. to LiveData () ĊĊĠĠĠ Ġval Ġfilters Ġ= ĠMed iator LiveData < Filters >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġ= ĠFilters () ĊĠĠĠĠĠĠĠ Ġadd Source ( room Filter Changed ) Ġ{ Ġroom Filter Changed Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroom Filter Changed ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġif Ġ( room Filter Changed . checked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilters Value . copy ( rooms Ġ= Ġfilters Value . rooms Ġ+ Ġit . room ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilters Value . copy ( rooms Ġ= Ġfilters Value . rooms Ġ- Ġit . room ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Source ( category Filter Changed ) Ġ{ Ġcategory Filter Changed Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Filter Changed ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġif Ġ( category Filter Changed . checked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilters Value . copy ( categories Ġ= Ġfilters Value . categories Ġ+ Ġit . category ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilters Value . copy ( categories Ġ= Ġfilters Value . categories Ġ- Ġit . category ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Source ( lang Filter Changed ) Ġ{ Ġlang Filter Changed Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlang Filter Changed ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġif Ġ( lang Filter Changed . checked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilters Value . copy ( langs Ġ= Ġfilters Value . langs Ġ+ Ġit . lang ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilters Value . copy ( langs Ġ= Ġfilters Value . langs Ġ- Ġit . lang ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Source ( lang Support Filter Changed ) Ġ{ Ġlang Support Filter Changed Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlang Support Filter Changed ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġif Ġ( lang Support Filter Changed . checked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilters Value . copy ( lang Supports Ġ= Ġfilters Value . lang Supports Ġ+ Ġit . lang Support ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilters Value . copy ( lang Supports Ġ= Ġfilters Value . lang Supports Ġ- Ġit . lang Support ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Source ( audience Category Filter Changed ) Ġ{ Ġaudience Category Filter Changed Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudience Category Filter Changed ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġif Ġ( audience Category Filter Changed . checked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilters Value . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudience Categories Ġ= Ġfilters Value . audience Categories Ġ+ Ġit . audience Category ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilters Value . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudience Categories Ġ= Ġfilters Value . audience Categories Ġ- Ġit . audience Category ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd Source ( filter Cle ared ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠFilters () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġfilters Value : ĠFilters Ġget () Ġ= Ġfilters . require Value () ĊĊĠĠĠ Ġval Ġfiltered Sessions : ĠLive Data < List < Session >> Ġ= Ġsessions ĊĠĠĠĠĠĠĠ Ġ. combine With ( filters ) Ġ{ Ġsessions , Ġfilters Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsessions Ġ?: Ġreturn @ combine With ĠlistOf < Session >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsessions . filter Ġ{ Ġsession Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilters ?. is Pass ( session ) Ġ?: Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġit . or Empty () Ġ} ĊĊĠĠĠ Ġval Ġselected Tab : ĠLive Data < Session Page > Ġ= Ġdispatcher ĊĠĠĠĠĠĠĠ Ġ. subscribe < Action . Session Page Selected >() ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . session Page Ġ} ĊĠĠĠĠĠĠĠ Ġ. to LiveData ( Session Page . pages [ 0 ]) ĊĊĠĠĠ Ġval Ġre selected Tab : ĠLive Data < Session Page > Ġ= Ġdispatcher ĊĠĠĠĠĠĠĠ Ġ. subscribe < Action . Session Page Re selected >() ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . session Page Ġ} ĊĠĠĠĠĠĠĠ Ġ. to Single LiveData ( Session Page . pages [ 0 ]) ĊĊĠĠĠ Ġval Ġsession Scroll Adjust ed : ĠLive Data < Boolean > Ġ= Ġdispatcher ĊĠĠĠĠĠĠĠ Ġ. subscribe < Action . Session Scroll Adjust ed >() ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . adjusted Ġ} ĊĠĠĠĠĠĠĠ Ġ. to Single LiveData ( false ) ĊĊĠĠĠ Ġfun Ġfiltered Sessions By Day ( day : ĠInt ): ĠLive Data < List < Session >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfiltered Sessions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġsessions Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsessions . or Empty (). filter Ġ{ Ġsession Ġ-> Ġsession . day Number Ġ== Ġday Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsessions By Day ( day : ĠInt ): ĠLive Data < List < Session >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsessions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġsessions Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsessions . or Empty (). filter Ġ{ Ġsession Ġ-> Ġsession . day Number Ġ== Ġday Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfiltered F avor ited Sessions (): ĠLive Data < List < Session >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfiltered Sessions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġsessions Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsessions . or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġsession Ġ-> Ġsession . is F avor ited Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ