mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 17:45:19 +00:00
PeerID 15/n: Bitchat Message & Packet accept in init (#754)
This commit is contained in:
@@ -42,7 +42,19 @@ final class BitchatMessage: Codable {
|
|||||||
case isPrivate, recipientNickname, senderPeerID, mentions, deliveryStatus
|
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.id = id ?? UUID().uuidString
|
||||||
self.sender = sender
|
self.sender = sender
|
||||||
self.content = content
|
self.content = content
|
||||||
@@ -51,7 +63,7 @@ final class BitchatMessage: Codable {
|
|||||||
self.originalSender = originalSender
|
self.originalSender = originalSender
|
||||||
self.isPrivate = isPrivate
|
self.isPrivate = isPrivate
|
||||||
self.recipientNickname = recipientNickname
|
self.recipientNickname = recipientNickname
|
||||||
self.senderPeerID = PeerID(str: senderPeerID)
|
self.senderPeerID = senderPeerID
|
||||||
self.mentions = mentions
|
self.mentions = mentions
|
||||||
self.deliveryStatus = deliveryStatus ?? (isPrivate ? .sending : nil)
|
self.deliveryStatus = deliveryStatus ?? (isPrivate ? .sending : nil)
|
||||||
}
|
}
|
||||||
@@ -264,11 +276,11 @@ extension BitchatMessage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var senderPeerID: String?
|
var senderPeerID: PeerID?
|
||||||
if hasSenderPeerID && offset < dataCopy.count {
|
if hasSenderPeerID && offset < dataCopy.count {
|
||||||
let length = Int(dataCopy[offset]); offset += 1
|
let length = Int(dataCopy[offset]); offset += 1
|
||||||
if offset + length <= dataCopy.count {
|
if offset + length <= dataCopy.count {
|
||||||
senderPeerID = String(data: dataCopy[offset..<offset+length], encoding: .utf8)
|
senderPeerID = PeerID(data: dataCopy[offset..<offset+length])
|
||||||
offset += length
|
offset += length
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,12 +34,12 @@ struct BitchatPacket: Codable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Convenience initializer for new binary format
|
// 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.version = 1
|
||||||
self.type = type
|
self.type = type
|
||||||
// Convert hex string peer ID to binary data (8 bytes)
|
// Convert hex string peer ID to binary data (8 bytes)
|
||||||
var senderData = Data()
|
var senderData = Data()
|
||||||
var tempID = senderID
|
var tempID = senderID.id
|
||||||
while tempID.count >= 2 {
|
while tempID.count >= 2 {
|
||||||
let hexByte = String(tempID.prefix(2))
|
let hexByte = String(tempID.prefix(2))
|
||||||
if let byte = UInt8(hexByte, radix: 16) {
|
if let byte = UInt8(hexByte, radix: 16) {
|
||||||
|
|||||||
@@ -69,8 +69,7 @@ extension PeerID {
|
|||||||
|
|
||||||
/// Convenience init to create PeerID by converting Data to String
|
/// Convenience init to create PeerID by converting Data to String
|
||||||
init?(data: Data) {
|
init?(data: Data) {
|
||||||
guard let str = String(data: data, encoding: .utf8) else { return nil }
|
self.init(str: String(data: data, encoding: .utf8))
|
||||||
self.init(str: str)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convenience init to "hide" hex-encoding implementation detail
|
/// Convenience init to "hide" hex-encoding implementation detail
|
||||||
|
|||||||
@@ -2791,7 +2791,7 @@ extension BLEService {
|
|||||||
let packet = BitchatPacket(
|
let packet = BitchatPacket(
|
||||||
type: MessageType.leave.rawValue,
|
type: MessageType.leave.rawValue,
|
||||||
ttl: messageTTL,
|
ttl: messageTTL,
|
||||||
senderID: myPeerID.id,
|
senderID: myPeerID,
|
||||||
payload: Data(myNickname.utf8)
|
payload: Data(myNickname.utf8)
|
||||||
)
|
)
|
||||||
broadcastPacket(packet)
|
broadcastPacket(packet)
|
||||||
|
|||||||
@@ -1009,7 +1009,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
content: content,
|
content: content,
|
||||||
timestamp: timestamp,
|
timestamp: timestamp,
|
||||||
isRelay: false,
|
isRelay: false,
|
||||||
senderPeerID: "nostr:\(event.pubkey.prefix(TransportConfig.nostrShortKeyDisplayLength))",
|
senderPeerID: PeerID(nostr: event.pubkey),
|
||||||
mentions: mentions.isEmpty ? nil : mentions
|
mentions: mentions.isEmpty ? nil : mentions
|
||||||
)
|
)
|
||||||
Task { @MainActor in
|
Task { @MainActor in
|
||||||
@@ -1080,7 +1080,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
isRelay: false,
|
isRelay: false,
|
||||||
isPrivate: true,
|
isPrivate: true,
|
||||||
recipientNickname: nickname,
|
recipientNickname: nickname,
|
||||||
senderPeerID: convKey,
|
senderPeerID: PeerID(str: convKey),
|
||||||
deliveryStatus: .delivered(to: nickname, at: Date())
|
deliveryStatus: .delivered(to: nickname, at: Date())
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1424,7 +1424,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
content: trimmed,
|
content: trimmed,
|
||||||
timestamp: Date(),
|
timestamp: Date(),
|
||||||
isRelay: false,
|
isRelay: false,
|
||||||
senderPeerID: localSenderPeerID.id,
|
senderPeerID: localSenderPeerID,
|
||||||
mentions: mentions.isEmpty ? nil : mentions
|
mentions: mentions.isEmpty ? nil : mentions
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1677,7 +1677,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
content: content,
|
content: content,
|
||||||
timestamp: min(rawTs, Date()),
|
timestamp: min(rawTs, Date()),
|
||||||
isRelay: false,
|
isRelay: false,
|
||||||
senderPeerID: "nostr:\(event.pubkey.prefix(TransportConfig.nostrShortKeyDisplayLength))",
|
senderPeerID: PeerID(nostr: event.pubkey),
|
||||||
mentions: mentions.isEmpty ? nil : mentions
|
mentions: mentions.isEmpty ? nil : mentions
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1777,7 +1777,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
isRelay: false,
|
isRelay: false,
|
||||||
isPrivate: true,
|
isPrivate: true,
|
||||||
recipientNickname: nickname,
|
recipientNickname: nickname,
|
||||||
senderPeerID: convKey,
|
senderPeerID: PeerID(str: convKey),
|
||||||
deliveryStatus: .delivered(to: nickname, at: Date())
|
deliveryStatus: .delivered(to: nickname, at: Date())
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2127,7 +2127,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
content: content,
|
content: content,
|
||||||
timestamp: ts,
|
timestamp: ts,
|
||||||
isRelay: false,
|
isRelay: false,
|
||||||
senderPeerID: "nostr:\(event.pubkey.prefix(TransportConfig.nostrShortKeyDisplayLength))",
|
senderPeerID: PeerID(nostr: event.pubkey),
|
||||||
mentions: mentions.isEmpty ? nil : mentions
|
mentions: mentions.isEmpty ? nil : mentions
|
||||||
)
|
)
|
||||||
if !arr.contains(where: { $0.id == msg.id }) {
|
if !arr.contains(where: { $0.id == msg.id }) {
|
||||||
@@ -2242,7 +2242,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
originalSender: nil,
|
originalSender: nil,
|
||||||
isPrivate: true,
|
isPrivate: true,
|
||||||
recipientNickname: recipientNickname,
|
recipientNickname: recipientNickname,
|
||||||
senderPeerID: meshService.myPeerID.id,
|
senderPeerID: meshService.myPeerID,
|
||||||
mentions: nil,
|
mentions: nil,
|
||||||
deliveryStatus: .sending
|
deliveryStatus: .sending
|
||||||
)
|
)
|
||||||
@@ -2299,7 +2299,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
isRelay: false,
|
isRelay: false,
|
||||||
isPrivate: true,
|
isPrivate: true,
|
||||||
recipientNickname: nickname,
|
recipientNickname: nickname,
|
||||||
senderPeerID: meshService.myPeerID.id,
|
senderPeerID: meshService.myPeerID,
|
||||||
deliveryStatus: .sending
|
deliveryStatus: .sending
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2397,7 +2397,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
originalSender: nil,
|
originalSender: nil,
|
||||||
isPrivate: true,
|
isPrivate: true,
|
||||||
recipientNickname: meshService.peerNickname(peerID: PeerID(str: peerID)),
|
recipientNickname: meshService.peerNickname(peerID: PeerID(str: peerID)),
|
||||||
senderPeerID: meshService.myPeerID.id
|
senderPeerID: meshService.myPeerID
|
||||||
)
|
)
|
||||||
if privateChats[peerID] == nil { privateChats[peerID] = [] }
|
if privateChats[peerID] == nil { privateChats[peerID] = [] }
|
||||||
privateChats[peerID]?.append(systemMessage)
|
privateChats[peerID]?.append(systemMessage)
|
||||||
@@ -2506,7 +2506,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
originalSender: message.originalSender,
|
originalSender: message.originalSender,
|
||||||
isPrivate: message.isPrivate,
|
isPrivate: message.isPrivate,
|
||||||
recipientNickname: message.recipientNickname,
|
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,
|
mentions: message.mentions,
|
||||||
deliveryStatus: message.deliveryStatus
|
deliveryStatus: message.deliveryStatus
|
||||||
)
|
)
|
||||||
@@ -2594,7 +2594,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
originalSender: message.originalSender,
|
originalSender: message.originalSender,
|
||||||
isPrivate: message.isPrivate,
|
isPrivate: message.isPrivate,
|
||||||
recipientNickname: message.recipientNickname,
|
recipientNickname: message.recipientNickname,
|
||||||
senderPeerID: peerID, // Update to match current peer
|
senderPeerID: PeerID(str: peerID), // Update to match current peer
|
||||||
mentions: message.mentions,
|
mentions: message.mentions,
|
||||||
deliveryStatus: message.deliveryStatus
|
deliveryStatus: message.deliveryStatus
|
||||||
)
|
)
|
||||||
@@ -2887,7 +2887,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
originalSender: nil,
|
originalSender: nil,
|
||||||
isPrivate: true,
|
isPrivate: true,
|
||||||
recipientNickname: meshService.peerNickname(peerID: PeerID(str: peerID)),
|
recipientNickname: meshService.peerNickname(peerID: PeerID(str: peerID)),
|
||||||
senderPeerID: meshService.myPeerID.id
|
senderPeerID: meshService.myPeerID
|
||||||
)
|
)
|
||||||
var chats = privateChats
|
var chats = privateChats
|
||||||
if chats[peerID] == nil {
|
if chats[peerID] == nil {
|
||||||
@@ -4450,7 +4450,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
originalSender: nil,
|
originalSender: nil,
|
||||||
isPrivate: true,
|
isPrivate: true,
|
||||||
recipientNickname: nickname,
|
recipientNickname: nickname,
|
||||||
senderPeerID: peerID,
|
senderPeerID: PeerID(str: peerID),
|
||||||
mentions: pmMentions.isEmpty ? nil : pmMentions
|
mentions: pmMentions.isEmpty ? nil : pmMentions
|
||||||
)
|
)
|
||||||
handlePrivateMessage(msg)
|
handlePrivateMessage(msg)
|
||||||
@@ -4557,7 +4557,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
originalSender: nil,
|
originalSender: nil,
|
||||||
isPrivate: false,
|
isPrivate: false,
|
||||||
recipientNickname: nil,
|
recipientNickname: nil,
|
||||||
senderPeerID: peerID,
|
senderPeerID: PeerID(str: peerID),
|
||||||
mentions: publicMentions.isEmpty ? nil : publicMentions
|
mentions: publicMentions.isEmpty ? nil : publicMentions
|
||||||
)
|
)
|
||||||
handlePublicMessage(msg)
|
handlePublicMessage(msg)
|
||||||
@@ -4658,7 +4658,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
originalSender: msg.originalSender,
|
originalSender: msg.originalSender,
|
||||||
isPrivate: msg.isPrivate,
|
isPrivate: msg.isPrivate,
|
||||||
recipientNickname: msg.recipientNickname,
|
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,
|
mentions: msg.mentions,
|
||||||
deliveryStatus: msg.deliveryStatus
|
deliveryStatus: msg.deliveryStatus
|
||||||
)
|
)
|
||||||
@@ -5190,7 +5190,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
isRelay: false,
|
isRelay: false,
|
||||||
isPrivate: true,
|
isPrivate: true,
|
||||||
recipientNickname: nickname,
|
recipientNickname: nickname,
|
||||||
senderPeerID: targetPeerID,
|
senderPeerID: PeerID(str: targetPeerID),
|
||||||
deliveryStatus: .delivered(to: nickname, at: Date())
|
deliveryStatus: .delivered(to: nickname, at: Date())
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -5530,7 +5530,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
originalSender: nil,
|
originalSender: nil,
|
||||||
isPrivate: true,
|
isPrivate: true,
|
||||||
recipientNickname: nickname,
|
recipientNickname: nickname,
|
||||||
senderPeerID: tempPeerID,
|
senderPeerID: PeerID(str: tempPeerID),
|
||||||
mentions: nil,
|
mentions: nil,
|
||||||
deliveryStatus: .delivered(to: nickname, at: Date())
|
deliveryStatus: .delivered(to: nickname, at: Date())
|
||||||
)
|
)
|
||||||
@@ -5693,7 +5693,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
originalSender: message.originalSender,
|
originalSender: message.originalSender,
|
||||||
isPrivate: message.isPrivate,
|
isPrivate: message.isPrivate,
|
||||||
recipientNickname: message.recipientNickname,
|
recipientNickname: message.recipientNickname,
|
||||||
senderPeerID: message.senderPeerID?.id,
|
senderPeerID: message.senderPeerID,
|
||||||
mentions: message.mentions,
|
mentions: message.mentions,
|
||||||
deliveryStatus: message.deliveryStatus
|
deliveryStatus: message.deliveryStatus
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ final class PublicChatE2ETests: XCTestCase {
|
|||||||
originalSender: message.sender,
|
originalSender: message.sender,
|
||||||
isPrivate: message.isPrivate,
|
isPrivate: message.isPrivate,
|
||||||
recipientNickname: message.recipientNickname,
|
recipientNickname: message.recipientNickname,
|
||||||
senderPeerID: message.senderPeerID?.id,
|
senderPeerID: message.senderPeerID,
|
||||||
mentions: message.mentions
|
mentions: message.mentions
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -450,7 +450,7 @@ final class PublicChatE2ETests: XCTestCase {
|
|||||||
originalSender: message.isRelay ? message.originalSender : message.sender,
|
originalSender: message.isRelay ? message.originalSender : message.sender,
|
||||||
isPrivate: message.isPrivate,
|
isPrivate: message.isPrivate,
|
||||||
recipientNickname: message.recipientNickname,
|
recipientNickname: message.recipientNickname,
|
||||||
senderPeerID: message.senderPeerID?.id,
|
senderPeerID: message.senderPeerID,
|
||||||
mentions: message.mentions
|
mentions: message.mentions
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -640,7 +640,7 @@ final class IntegrationTests: XCTestCase {
|
|||||||
originalSender: message.isRelay ? message.originalSender : message.sender,
|
originalSender: message.isRelay ? message.originalSender : message.sender,
|
||||||
isPrivate: message.isPrivate,
|
isPrivate: message.isPrivate,
|
||||||
recipientNickname: message.recipientNickname,
|
recipientNickname: message.recipientNickname,
|
||||||
senderPeerID: message.senderPeerID?.id,
|
senderPeerID: message.senderPeerID,
|
||||||
mentions: message.mentions
|
mentions: message.mentions
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ final class MockBLEService: NSObject {
|
|||||||
originalSender: nil,
|
originalSender: nil,
|
||||||
isPrivate: recipientID != nil,
|
isPrivate: recipientID != nil,
|
||||||
recipientNickname: nil,
|
recipientNickname: nil,
|
||||||
senderPeerID: myPeerID,
|
senderPeerID: PeerID(str: myPeerID),
|
||||||
mentions: mentions.isEmpty ? nil : mentions
|
mentions: mentions.isEmpty ? nil : mentions
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -192,7 +192,7 @@ final class MockBLEService: NSObject {
|
|||||||
originalSender: nil,
|
originalSender: nil,
|
||||||
isPrivate: true,
|
isPrivate: true,
|
||||||
recipientNickname: recipientNickname,
|
recipientNickname: recipientNickname,
|
||||||
senderPeerID: myPeerID,
|
senderPeerID: PeerID(str: myPeerID),
|
||||||
mentions: nil
|
mentions: nil
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ final class BinaryProtocolTests: XCTestCase {
|
|||||||
originalSender: TestConstants.testNickname3,
|
originalSender: TestConstants.testNickname3,
|
||||||
isPrivate: false,
|
isPrivate: false,
|
||||||
recipientNickname: nil,
|
recipientNickname: nil,
|
||||||
senderPeerID: TestConstants.testPeerID1.id,
|
senderPeerID: TestConstants.testPeerID1,
|
||||||
mentions: nil
|
mentions: nil
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ final class TestHelpers {
|
|||||||
originalSender: nil,
|
originalSender: nil,
|
||||||
isPrivate: isPrivate,
|
isPrivate: isPrivate,
|
||||||
recipientNickname: recipientNickname,
|
recipientNickname: recipientNickname,
|
||||||
senderPeerID: senderPeerID.id,
|
senderPeerID: senderPeerID,
|
||||||
mentions: mentions
|
mentions: mentions
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user