PeerID 15/n: Bitchat Message & Packet accept in init (#754)

This commit is contained in:
Islam
2025-10-06 17:16:11 +02:00
committed by GitHub
parent 01ec4573f8
commit 5f44c56a90
10 changed files with 45 additions and 34 deletions
+16 -4
View File
@@ -42,7 +42,19 @@ final class BitchatMessage: Codable {
case isPrivate, recipientNickname, senderPeerID, mentions, deliveryStatus
}
init(id: String? = nil, sender: String, content: String, timestamp: Date, isRelay: Bool, originalSender: String? = nil, isPrivate: Bool = false, recipientNickname: String? = nil, senderPeerID: String? = nil, mentions: [String]? = nil, deliveryStatus: DeliveryStatus? = nil) {
init(
id: String? = nil,
sender: String,
content: String,
timestamp: Date,
isRelay: Bool,
originalSender: String? = nil,
isPrivate: Bool = false,
recipientNickname: String? = nil,
senderPeerID: PeerID? = nil,
mentions: [String]? = nil,
deliveryStatus: DeliveryStatus? = nil
) {
self.id = id ?? UUID().uuidString
self.sender = sender
self.content = content
@@ -51,7 +63,7 @@ final class BitchatMessage: Codable {
self.originalSender = originalSender
self.isPrivate = isPrivate
self.recipientNickname = recipientNickname
self.senderPeerID = PeerID(str: senderPeerID)
self.senderPeerID = senderPeerID
self.mentions = mentions
self.deliveryStatus = deliveryStatus ?? (isPrivate ? .sending : nil)
}
@@ -264,11 +276,11 @@ extension BitchatMessage {
}
}
var senderPeerID: String?
var senderPeerID: PeerID?
if hasSenderPeerID && offset < dataCopy.count {
let length = Int(dataCopy[offset]); offset += 1
if offset + length <= dataCopy.count {
senderPeerID = String(data: dataCopy[offset..<offset+length], encoding: .utf8)
senderPeerID = PeerID(data: dataCopy[offset..<offset+length])
offset += length
}
}
+2 -2
View File
@@ -34,12 +34,12 @@ struct BitchatPacket: Codable {
}
// Convenience initializer for new binary format
init(type: UInt8, ttl: UInt8, senderID: String, payload: Data) {
init(type: UInt8, ttl: UInt8, senderID: PeerID, payload: Data) {
self.version = 1
self.type = type
// Convert hex string peer ID to binary data (8 bytes)
var senderData = Data()
var tempID = senderID
var tempID = senderID.id
while tempID.count >= 2 {
let hexByte = String(tempID.prefix(2))
if let byte = UInt8(hexByte, radix: 16) {
+1 -2
View File
@@ -69,8 +69,7 @@ extension PeerID {
/// Convenience init to create PeerID by converting Data to String
init?(data: Data) {
guard let str = String(data: data, encoding: .utf8) else { return nil }
self.init(str: str)
self.init(str: String(data: data, encoding: .utf8))
}
/// Convenience init to "hide" hex-encoding implementation detail
+1 -1
View File
@@ -2791,7 +2791,7 @@ extension BLEService {
let packet = BitchatPacket(
type: MessageType.leave.rawValue,
ttl: messageTTL,
senderID: myPeerID.id,
senderID: myPeerID,
payload: Data(myNickname.utf8)
)
broadcastPacket(packet)
+18 -18
View File
@@ -1009,7 +1009,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
content: content,
timestamp: timestamp,
isRelay: false,
senderPeerID: "nostr:\(event.pubkey.prefix(TransportConfig.nostrShortKeyDisplayLength))",
senderPeerID: PeerID(nostr: event.pubkey),
mentions: mentions.isEmpty ? nil : mentions
)
Task { @MainActor in
@@ -1080,7 +1080,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
isRelay: false,
isPrivate: true,
recipientNickname: nickname,
senderPeerID: convKey,
senderPeerID: PeerID(str: convKey),
deliveryStatus: .delivered(to: nickname, at: Date())
)
@@ -1424,7 +1424,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
content: trimmed,
timestamp: Date(),
isRelay: false,
senderPeerID: localSenderPeerID.id,
senderPeerID: localSenderPeerID,
mentions: mentions.isEmpty ? nil : mentions
)
@@ -1677,7 +1677,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
content: content,
timestamp: min(rawTs, Date()),
isRelay: false,
senderPeerID: "nostr:\(event.pubkey.prefix(TransportConfig.nostrShortKeyDisplayLength))",
senderPeerID: PeerID(nostr: event.pubkey),
mentions: mentions.isEmpty ? nil : mentions
)
@@ -1777,7 +1777,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
isRelay: false,
isPrivate: true,
recipientNickname: nickname,
senderPeerID: convKey,
senderPeerID: PeerID(str: convKey),
deliveryStatus: .delivered(to: nickname, at: Date())
)
@@ -2127,7 +2127,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
content: content,
timestamp: ts,
isRelay: false,
senderPeerID: "nostr:\(event.pubkey.prefix(TransportConfig.nostrShortKeyDisplayLength))",
senderPeerID: PeerID(nostr: event.pubkey),
mentions: mentions.isEmpty ? nil : mentions
)
if !arr.contains(where: { $0.id == msg.id }) {
@@ -2242,7 +2242,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
originalSender: nil,
isPrivate: true,
recipientNickname: recipientNickname,
senderPeerID: meshService.myPeerID.id,
senderPeerID: meshService.myPeerID,
mentions: nil,
deliveryStatus: .sending
)
@@ -2299,7 +2299,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
isRelay: false,
isPrivate: true,
recipientNickname: nickname,
senderPeerID: meshService.myPeerID.id,
senderPeerID: meshService.myPeerID,
deliveryStatus: .sending
)
@@ -2397,7 +2397,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
originalSender: nil,
isPrivate: true,
recipientNickname: meshService.peerNickname(peerID: PeerID(str: peerID)),
senderPeerID: meshService.myPeerID.id
senderPeerID: meshService.myPeerID
)
if privateChats[peerID] == nil { privateChats[peerID] = [] }
privateChats[peerID]?.append(systemMessage)
@@ -2506,7 +2506,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
originalSender: message.originalSender,
isPrivate: message.isPrivate,
recipientNickname: message.recipientNickname,
senderPeerID: message.senderPeerID == meshService.myPeerID ? meshService.myPeerID.id : peerID, // Update peer ID if it's from them
senderPeerID: message.senderPeerID == meshService.myPeerID ? meshService.myPeerID : PeerID(str: peerID), // Update peer ID if it's from them
mentions: message.mentions,
deliveryStatus: message.deliveryStatus
)
@@ -2594,7 +2594,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
originalSender: message.originalSender,
isPrivate: message.isPrivate,
recipientNickname: message.recipientNickname,
senderPeerID: peerID, // Update to match current peer
senderPeerID: PeerID(str: peerID), // Update to match current peer
mentions: message.mentions,
deliveryStatus: message.deliveryStatus
)
@@ -2887,7 +2887,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
originalSender: nil,
isPrivate: true,
recipientNickname: meshService.peerNickname(peerID: PeerID(str: peerID)),
senderPeerID: meshService.myPeerID.id
senderPeerID: meshService.myPeerID
)
var chats = privateChats
if chats[peerID] == nil {
@@ -4450,7 +4450,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
originalSender: nil,
isPrivate: true,
recipientNickname: nickname,
senderPeerID: peerID,
senderPeerID: PeerID(str: peerID),
mentions: pmMentions.isEmpty ? nil : pmMentions
)
handlePrivateMessage(msg)
@@ -4557,7 +4557,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
originalSender: nil,
isPrivate: false,
recipientNickname: nil,
senderPeerID: peerID,
senderPeerID: PeerID(str: peerID),
mentions: publicMentions.isEmpty ? nil : publicMentions
)
handlePublicMessage(msg)
@@ -4658,7 +4658,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
originalSender: msg.originalSender,
isPrivate: msg.isPrivate,
recipientNickname: msg.recipientNickname,
senderPeerID: msg.senderPeerID == meshService.myPeerID ? meshService.myPeerID.id : stableKeyHex,
senderPeerID: msg.senderPeerID == meshService.myPeerID ? meshService.myPeerID : PeerID(str: stableKeyHex),
mentions: msg.mentions,
deliveryStatus: msg.deliveryStatus
)
@@ -5190,7 +5190,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
isRelay: false,
isPrivate: true,
recipientNickname: nickname,
senderPeerID: targetPeerID,
senderPeerID: PeerID(str: targetPeerID),
deliveryStatus: .delivered(to: nickname, at: Date())
)
@@ -5530,7 +5530,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
originalSender: nil,
isPrivate: true,
recipientNickname: nickname,
senderPeerID: tempPeerID,
senderPeerID: PeerID(str: tempPeerID),
mentions: nil,
deliveryStatus: .delivered(to: nickname, at: Date())
)
@@ -5693,7 +5693,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
originalSender: message.originalSender,
isPrivate: message.isPrivate,
recipientNickname: message.recipientNickname,
senderPeerID: message.senderPeerID?.id,
senderPeerID: message.senderPeerID,
mentions: message.mentions,
deliveryStatus: message.deliveryStatus
)
@@ -111,7 +111,7 @@ final class PublicChatE2ETests: XCTestCase {
originalSender: message.sender,
isPrivate: message.isPrivate,
recipientNickname: message.recipientNickname,
senderPeerID: message.senderPeerID?.id,
senderPeerID: message.senderPeerID,
mentions: message.mentions
)
@@ -450,7 +450,7 @@ final class PublicChatE2ETests: XCTestCase {
originalSender: message.isRelay ? message.originalSender : message.sender,
isPrivate: message.isPrivate,
recipientNickname: message.recipientNickname,
senderPeerID: message.senderPeerID?.id,
senderPeerID: message.senderPeerID,
mentions: message.mentions
)
@@ -640,7 +640,7 @@ final class IntegrationTests: XCTestCase {
originalSender: message.isRelay ? message.originalSender : message.sender,
isPrivate: message.isPrivate,
recipientNickname: message.recipientNickname,
senderPeerID: message.senderPeerID?.id,
senderPeerID: message.senderPeerID,
mentions: message.mentions
)
+2 -2
View File
@@ -147,7 +147,7 @@ final class MockBLEService: NSObject {
originalSender: nil,
isPrivate: recipientID != nil,
recipientNickname: nil,
senderPeerID: myPeerID,
senderPeerID: PeerID(str: myPeerID),
mentions: mentions.isEmpty ? nil : mentions
)
@@ -192,7 +192,7 @@ final class MockBLEService: NSObject {
originalSender: nil,
isPrivate: true,
recipientNickname: recipientNickname,
senderPeerID: myPeerID,
senderPeerID: PeerID(str: myPeerID),
mentions: nil
)
@@ -251,7 +251,7 @@ final class BinaryProtocolTests: XCTestCase {
originalSender: TestConstants.testNickname3,
isPrivate: false,
recipientNickname: nil,
senderPeerID: TestConstants.testPeerID1.id,
senderPeerID: TestConstants.testPeerID1,
mentions: nil
)
+1 -1
View File
@@ -44,7 +44,7 @@ final class TestHelpers {
originalSender: nil,
isPrivate: isPrivate,
recipientNickname: recipientNickname,
senderPeerID: senderPeerID.id,
senderPeerID: senderPeerID,
mentions: mentions
)
}