Add private chat feature and fix peer discovery issues

- Implement 1:1 private messaging with IRC-style interface
- Add private message type to protocol with routing through mesh
- Show orange notification dot for unread private messages
- Fix peer list not showing connected peers
- Update peer nicknames immediately on first message
- Auto-exit private chat when peer disconnects
- Improve join/leave channel messages visibility
- Make send button larger for better UX
- Center and color private chat header in orange
This commit is contained in:
jack
2025-07-02 21:11:12 +02:00
parent 304c121467
commit 5c9d2122dc
4 changed files with 589 additions and 134 deletions
+10 -2
View File
@@ -8,6 +8,8 @@ enum MessageType: UInt8 {
case relay = 0x04
case announce = 0x05
case keyExchange = 0x06
case leave = 0x07
case privateMessage = 0x08
}
struct BitchatPacket: Codable {
@@ -40,21 +42,27 @@ struct BitchatPacket: Codable {
}
}
struct BitchatMessage: Codable {
struct BitchatMessage: Codable, Equatable {
let id: String
let sender: String
let content: String
let timestamp: Date
let isRelay: Bool
let originalSender: String?
let isPrivate: Bool
let recipientNickname: String?
let senderPeerID: String?
init(sender: String, content: String, timestamp: Date, isRelay: Bool, originalSender: String? = nil) {
init(sender: String, content: String, timestamp: Date, isRelay: Bool, originalSender: String? = nil, isPrivate: Bool = false, recipientNickname: String? = nil, senderPeerID: String? = nil) {
self.id = UUID().uuidString
self.sender = sender
self.content = content
self.timestamp = timestamp
self.isRelay = isRelay
self.originalSender = originalSender
self.isPrivate = isPrivate
self.recipientNickname = recipientNickname
self.senderPeerID = senderPeerID
}
}