Update LumaRoomStore.swift
This commit is contained in:
1 parent
e632e46272
commit
9e3b40eff7
1 file changed
+8
-6
@@ -1,20 +1,22 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import Martin
|
import Martin
|
||||||
|
|
||||||
|
/// Martin 3.2.4 does not expose `DefaultRoomStore.init()` outside its module.
|
||||||
|
/// This mirrors its in-memory behavior so the app can register XEP-0045 MUC.
|
||||||
final class LumaRoomStore: RoomStore {
|
final class LumaRoomStore: RoomStore {
|
||||||
typealias Room = RoomBase
|
typealias Room = RoomBase
|
||||||
|
|
||||||
private let dispatcher = QueueDispatcher(label: "LumaRoomStore")
|
private let queue = DispatchQueue(label: "LumaRoomStore")
|
||||||
private var roomsByJID: [BareJID: RoomBase] = [:]
|
private var roomsByJID: [BareJID: RoomBase] = [:]
|
||||||
|
|
||||||
func rooms(for context: Context) -> [RoomBase] {
|
func rooms(for context: Context) -> [RoomBase] {
|
||||||
dispatcher.sync {
|
queue.sync {
|
||||||
Array(roomsByJID.values)
|
Array(roomsByJID.values)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func room(for context: Context, with jid: BareJID) -> RoomBase? {
|
func room(for context: Context, with jid: BareJID) -> RoomBase? {
|
||||||
dispatcher.sync {
|
queue.sync {
|
||||||
roomsByJID[jid]
|
roomsByJID[jid]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -25,7 +27,7 @@ final class LumaRoomStore: RoomStore {
|
|||||||
nickname: String,
|
nickname: String,
|
||||||
password: String?
|
password: String?
|
||||||
) -> ConversationCreateResult<RoomBase> {
|
) -> ConversationCreateResult<RoomBase> {
|
||||||
dispatcher.sync {
|
queue.sync {
|
||||||
if let room = roomsByJID[jid] {
|
if let room = roomsByJID[jid] {
|
||||||
return .found(room)
|
return .found(room)
|
||||||
}
|
}
|
||||||
@@ -34,7 +36,7 @@ final class LumaRoomStore: RoomStore {
|
|||||||
jid: jid,
|
jid: jid,
|
||||||
nickname: nickname,
|
nickname: nickname,
|
||||||
password: password,
|
password: password,
|
||||||
dispatcher: dispatcher
|
dispatcher: QueueDispatcher(queue: queue)
|
||||||
)
|
)
|
||||||
roomsByJID[jid] = room
|
roomsByJID[jid] = room
|
||||||
return .created(room)
|
return .created(room)
|
||||||
@@ -42,7 +44,7 @@ final class LumaRoomStore: RoomStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func close(room: RoomBase) -> Bool {
|
func close(room: RoomBase) -> Bool {
|
||||||
dispatcher.sync {
|
queue.sync {
|
||||||
guard roomsByJID[room.jid] === room else { return false }
|
guard roomsByJID[room.jid] === room else { return false }
|
||||||
roomsByJID.removeValue(forKey: room.jid)
|
roomsByJID.removeValue(forKey: room.jid)
|
||||||
return true
|
return true
|
||||||
|
|||||||
Reference in new issue
Block a user