Skip to content

Commit fc929bf

Browse files
committed
Koja: change arrays to dicts
1 parent 3c28290 commit fc929bf

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

Sources/allonet2/StandardComponents.swift

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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
227229
public 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
245248
public 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
261265
public 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

Comments
 (0)