package Ġorg . jetbrains . kotlin conf . ui Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . arch . lifecycle . Android ViewModel Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġandroid . arch . lifecycle . Mediator LiveData Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġorg . jetbrains . kotlin conf . Kotlin Conf Application Ċ import Ġorg . jetbrains . kotlin conf . Session Model Ċ import Ġorg . jetbrains . kotlin conf . model . Kotlin Conf Data Repository Ċ import Ġorg . jetbrains . kotlin conf . model . Session Rating Ċ import Ġorg . jetbrains . ank o . An ko Logger Ċ Ċ class ĠSession Details ViewModel ( app : ĠApplication ): ĠAndroid ViewModel ( app ), ĠAn ko Logger Ġ{ ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠKotlin Conf Data Repository Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Application < Kotlin Conf Application >(). repository ĊĊĠĠĠ Ġprivate Ġval Ġ_ session : ĠMutable LiveData < Session Model > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġsession : ĠLive Data < Session Model > Ġ= Ġ_ session ĊĊĠĠĠ Ġval Ġis Favorite : ĠLive Data < Boolean > Ġ= ĠMed iator LiveData < Boolean >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Source ( session ) Ġ{ Ġsession Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġrepository . favorites . value ?. contains ( session ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd Source ( repository . favorites ) Ġ{ Ġfavor ites Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġfavor ites ?. contains ( session . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġrating : ĠLive Data < Session Rating ?> Ġ= ĠMed iator LiveData < Session Rating ?> (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Source ( session ) Ġ{ Ġsession Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġsession ?. id ?. let Ġ{ Ġrepository . ratings . value ?. get ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd Source ( repository . ratings ) Ġ{ Ġratings Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġsession . value ?. id ?. let Ġ{ Ġratings ?. get ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġtoggle Favorite () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Favorite Ġ= Ġ!( is Favorite . value Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ_ session . value ?. id ?. let Ġ{ Ġrepository . set Favorite ( it , Ġis Favorite ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġset Rating ( rating : ĠSession Rating ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ session . value ?. id ?. let Ġ{ ĠsessionId Ġ-> Ġrepository . add Rating ( sessionId , Ġrating ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġremove Rating () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ session . value ?. id ?. let Ġ{ ĠsessionId Ġ-> Ġrepository . remove Rating ( sessionId ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Session ( sessionId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis ._ session . value Ġ= Ġrepository . sessions . value ?. find Ġ{ Ġit . id Ġ== ĠsessionId Ġ} ĊĠĠĠ Ġ} Ċ }