mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 20:25:19 +00:00
Improve room functionality
- Fix header to show "x people / y rooms" count - Add proper leave room functionality that cleans up data - Track and display room members in sidebar - Show "IN #ROOM" header when viewing a room - Only show peers who have sent messages to current room - Add leave button in room header alongside main button - Ensure senderPeerID is set for room member tracking
This commit is contained in:
@@ -39,6 +39,7 @@ class ChatViewModel: ObservableObject {
|
||||
@Published var currentRoom: String? = nil // Currently selected room
|
||||
@Published var roomMessages: [String: [BitchatMessage]] = [:] // room -> messages
|
||||
@Published var unreadRoomMessages: [String: Int] = [:] // room -> unread count
|
||||
@Published var roomMembers: [String: Set<String>] = [:] // room -> set of peer IDs who have sent messages
|
||||
|
||||
let meshService = BluetoothMeshService()
|
||||
private let userDefaults = UserDefaults.standard
|
||||
@@ -132,8 +133,10 @@ class ChatViewModel: ObservableObject {
|
||||
currentRoom = nil
|
||||
}
|
||||
|
||||
// Keep messages for now (could clear if desired)
|
||||
// Clean up room data
|
||||
unreadRoomMessages.removeValue(forKey: room)
|
||||
roomMessages.removeValue(forKey: room)
|
||||
roomMembers.removeValue(forKey: room)
|
||||
}
|
||||
|
||||
func switchToRoom(_ room: String?) {
|
||||
@@ -229,6 +232,9 @@ class ChatViewModel: ObservableObject {
|
||||
timestamp: Date(),
|
||||
isRelay: false,
|
||||
originalSender: nil,
|
||||
isPrivate: false,
|
||||
recipientNickname: nil,
|
||||
senderPeerID: meshService.myPeerID,
|
||||
mentions: mentions.isEmpty ? nil : mentions,
|
||||
room: messageRoom
|
||||
)
|
||||
@@ -239,6 +245,12 @@ class ChatViewModel: ObservableObject {
|
||||
roomMessages[room] = []
|
||||
}
|
||||
roomMessages[room]?.append(message)
|
||||
|
||||
// Track ourselves as a room member
|
||||
if roomMembers[room] == nil {
|
||||
roomMembers[room] = []
|
||||
}
|
||||
roomMembers[room]?.insert(meshService.myPeerID)
|
||||
} else {
|
||||
// Add to main messages
|
||||
messages.append(message)
|
||||
@@ -658,6 +670,14 @@ extension ChatViewModel: BitchatDelegate {
|
||||
roomMessages[room]?.append(message)
|
||||
roomMessages[room]?.sort { $0.timestamp < $1.timestamp }
|
||||
|
||||
// Track room members
|
||||
if roomMembers[room] == nil {
|
||||
roomMembers[room] = []
|
||||
}
|
||||
if let senderPeerID = message.senderPeerID {
|
||||
roomMembers[room]?.insert(senderPeerID)
|
||||
}
|
||||
|
||||
// Update unread count if not currently viewing this room
|
||||
if currentRoom != room {
|
||||
unreadRoomMessages[room] = (unreadRoomMessages[room] ?? 0) + 1
|
||||
|
||||
Reference in New Issue
Block a user