@@ -219,20 +219,23 @@ public enum PresenceMode: String, Codable, CaseIterable, Identifiable
219219 case away = " Away "
220220 // Not spatial (i e no location in place), speaker off, mic off
221221 case invisible = " Invisible "
222+ // Not currently connected. Cannot be set by user.
223+ case offline = " Offline "
222224
223225 public var id : String { rawValue }
224226}
225227
226228@MainActor
227229public struct KojaUser : Codable , Equatable , Identifiable
228230{
229- public let id : String
230- public let avatarId : EntityID
231+ public typealias ID = String
232+ public let id : KojaUser . ID
233+ public let avatarId : EntityID ? // nil = offline
231234 public var displayName : String
232235 public var email : String ?
233236 public var presence : PresenceMode
234237
235- public init ( id: String , avatarId: EntityID , displayName: String , email: String ? , presence: PresenceMode ) {
238+ public init ( id: String , avatarId: EntityID ? , displayName: String , email: String ? , presence: PresenceMode ) {
236239 self . id = id
237240 self . avatarId = avatarId
238241 self . displayName = displayName
@@ -244,11 +247,12 @@ public struct KojaUser: Codable, Equatable, Identifiable
244247@MainActor
245248public struct KojaRoom : Codable , Equatable , Identifiable
246249{
247- public let id : String
250+ public typealias ID = String
251+ public let id : KojaRoom . ID
248252 public let name : String
249253 public let entity : EntityID
250254 // TODO: room usage (meeting, team room, etc)
251- public var users : [ KojaUser ] = [ ]
255+ public var users : [ KojaUser . ID : KojaUser ] = [ : ]
252256
253257 public init ( id: String , name: String , entity: EntityID ) {
254258 self . id = id
@@ -260,13 +264,13 @@ public struct KojaRoom: Codable, Equatable, Identifiable
260264@MainActor
261265public struct KojaPlaceInfo : Component
262266{
263- public var rooms : [ KojaRoom ] = [ ]
264- public var invisibleUsers : [ KojaUser ] = [ ]
265- public var offlineUsers : [ KojaUser ] = [ ]
267+ public var rooms : [ KojaRoom . ID : KojaRoom ] = [ : ]
268+ public var invisibleUsers : [ KojaUser . ID : KojaUser ] = [ : ]
269+ public var offlineUsers : [ KojaUser . ID : KojaUser ] = [ : ]
266270 public init ( ) { }
267271
268- public var allUsers : [ KojaUser ] {
269- return rooms. flatMap { $0 . users } + invisibleUsers + offlineUsers
272+ public var allUsers : [ KojaUser . ID : KojaUser ] {
273+ Dictionary ( rooms. values . flatMap ( \ . users) + invisibleUsers + offlineUsers, uniquingKeysWith : { _ , new in new } )
270274 }
271275}
272276
0 commit comments