package Ġar cus . presentation . device . list Ċ Ċ import Ġar cus . cor nea . dto . Hub Device Model DTO Ċ import Ġar cus . cor nea . helpers . await Ċ import Ġar cus . cor nea . provider . Device Model Provider Ċ import Ġar cus . cor nea . provider . Hub Model Provider Ċ import Ġar cus . presentation . common . view . ViewState Ċ import Ġar cus . presentation . common . view . ViewState ViewModel Ċ import Ġcom . iris . client . capability . Device Connection Ċ import Ġcom . iris . client . capability . Hub Connection Ċ import Ġcom . iris . client . capability . Presence Ċ import Ġcom . iris . client . event . Listener Registration Ċ import Ġcom . iris . client . model . Device Model Ċ import Ġcom . iris . client . model . Hub Model Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ // ĠTODO : Ġ@ Inject , ĠClick s Ġparsed Ġin ĠVM Ġand Ġsent Ġto ĠView Ġas ĠNavigation Ġevents . Ċ class ĠDevice List ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġdevice Provider : ĠDevice Model Provider Ġ= ĠDevice Model Provider . instance (), ĊĠĠĠ Ġprivate Ġval Ġhub Provider : ĠHub Model Provider Ġ= ĠHub Model Provider . instance () Ċ ) Ġ: ĠView State ViewModel < Devices >() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġdevice Listener : ĠListener Registration Ġ= Ġdevice Provider . store . addListener Ġ{ Ġload Data () Ġ} ĊĠĠĠ Ġprivate Ġvar Ġhub Listener : ĠListener Registration Ġ= Ġhub Provider . store . addListener Ġ{ Ġload Data () Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġsafe Launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit Loading () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Devices Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhub Ġ= Ġhub Provider . load (). await (). first OrNull (). to ListItem () Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Provider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to ListItem () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( hub ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ view State . value Ġ= ĠView State . Loaded ( Devices ( all Devices . size , Ġall Devices Ġ+ ĠFooter ListItem )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġdevice Listener . remove () ĊĠĠĠĠĠĠĠ Ġhub Listener . remove () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠHub Model ?. to ListItem (): ĠList < Device ListItem >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhub Ġ= Ġthis Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDevice ListItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġhub . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġhub . name . or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Cloud Connected Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Offline Ġ= ĠHub Connection . STATE _ OFF LINE Ġ== Ġhub . get ( Hub Connection . ATTR _ STATE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Ġ= ĠHub Device Model DTO ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDevice Model . to ListItem (): ĠDevice ListItem Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Offline Ġ= ĠDevice Connection . STATE _ OFF LINE Ġ== Ġget ( Device Connection . ATTR _ STATE ) ĊĠĠĠĠĠĠĠ Ġval Ġis Presence Device Ġ= Ġcaps . or Empty (). contains ( Presence . NAMESPACE ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠDevice ListItem ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname . or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Cloud Connected Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Offline Ġ= Ġis Offline Ġ&& Ġ! is Presence Device , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ