From 0e54a624f11ecb4ec451e62f5bba21fb9b8ad04d Mon Sep 17 00:00:00 2001 From: Florent Date: Fri, 11 Jul 2025 09:17:52 +0200 Subject: [PATCH] support manual add contact --- src/meshcore/commands.py | 3 +++ src/meshcore/events.py | 1 + src/meshcore/reader.py | 9 +++++++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/meshcore/commands.py b/src/meshcore/commands.py index 37188da..862e7bd 100644 --- a/src/meshcore/commands.py +++ b/src/meshcore/commands.py @@ -313,6 +313,9 @@ class CommandHandler: + int(contact["adv_lon"]*1e6).to_bytes(4, 'little', signed=True) return await self.send(data, [EventType.OK, EventType.ERROR]) + async def add_contact (self, contact) -> Event: + return await self.update_contact(contact) + async def change_contact_path (self, contact, path) -> Event: return await self.update_contact(contact, path) diff --git a/src/meshcore/events.py b/src/meshcore/events.py index bedd36d..84e991a 100644 --- a/src/meshcore/events.py +++ b/src/meshcore/events.py @@ -20,6 +20,7 @@ class EventType(Enum): DEVICE_INFO = "device_info" CLI_RESPONSE = "cli_response" MSG_SENT = "message_sent" + NEW_CONTACT = "new_contact" # Push notifications ADVERTISEMENT = "advertisement" diff --git a/src/meshcore/reader.py b/src/meshcore/reader.py index 1f7c8bf..7e2cfa0 100644 --- a/src/meshcore/reader.py +++ b/src/meshcore/reader.py @@ -99,7 +99,8 @@ class MessageReader: await self.dispatcher.dispatch(Event(EventType.MSG_SENT, res, attributes)) - elif packet_type_value == PacketType.CONTACT_MSG_RECV.value: + elif packet_type_value == PacketType.CONTACT_MSG_RECV.value or\ + packet_type_value == PacketType.PUSH_CODE_NEW_ADVERT.value: res = {} res["type"] = "PRIV" res["pubkey_prefix"] = data[1:7].hex() @@ -117,7 +118,11 @@ class MessageReader: "txt_type": res["txt_type"] } - await self.dispatcher.dispatch(Event(EventType.CONTACT_MSG_RECV, res, attributes)) + evt_type = EventType.CONTACT_MSG_RECV + if packet_type_value == PacketType.PUSH_CODE_NEW_ADVERT.value : + evt_type = EventType.NEW_CONTACT + + await self.dispatcher.dispatch(Event(evt_type, res, attributes)) elif packet_type_value == 16: # A reply to CMD_SYNC_NEXT_MESSAGE (ver >= 3) res = {}