diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index c7a42cb09..02749feb8 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -689,11 +689,11 @@ void NodeDB::updateTelemetry(uint32_t nodeId, const meshtastic_Telemetry &t, RxS /** Update user info for this node based on received user data */ -void NodeDB::updateUser(uint32_t nodeId, const meshtastic_User &p) +bool NodeDB::updateUser(uint32_t nodeId, const meshtastic_User &p) { meshtastic_NodeInfo *info = getOrCreateNode(nodeId); if (!info) { - return; + return false; } LOG_DEBUG("old user %s/%s/%s\n", info->user.id, info->user.long_name, info->user.short_name); @@ -713,6 +713,8 @@ void NodeDB::updateUser(uint32_t nodeId, const meshtastic_User &p) // We just changed something important about the user, store our DB saveToDisk(SEGMENT_DEVICESTATE); } + + return changed; } /// given a subpacket sniffed from the network, update our DB state diff --git a/src/mesh/NodeDB.h b/src/mesh/NodeDB.h index 2822ffbf6..541b51f83 100644 --- a/src/mesh/NodeDB.h +++ b/src/mesh/NodeDB.h @@ -86,7 +86,7 @@ class NodeDB /** Update user info for this node based on received user data */ - void updateUser(uint32_t nodeId, const meshtastic_User &p); + bool updateUser(uint32_t nodeId, const meshtastic_User &p); /// @return our node number NodeNum getNodeNum() { return myNodeInfo.my_node_num; } diff --git a/src/modules/NodeInfoModule.cpp b/src/modules/NodeInfoModule.cpp index cf8c17c3b..09819dab1 100644 --- a/src/modules/NodeInfoModule.cpp +++ b/src/modules/NodeInfoModule.cpp @@ -12,7 +12,7 @@ bool NodeInfoModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, mes { auto p = *pptr; - nodeDB.updateUser(getFrom(&mp), p); + bool hasChanged = nodeDB.updateUser(getFrom(&mp), p); bool wasBroadcast = mp.to == NODENUM_BROADCAST; @@ -23,6 +23,10 @@ bool NodeInfoModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, mes screen->print(lcd.c_str()); } + // if user has changed while packet was not for us, inform phone + if (hasChanged && !wasBroadcast && mp.to != nodeDB.getNodeNum()) + service.sendToPhone(packetPool.allocCopy(mp)); + // LOG_DEBUG("did handleReceived\n"); return false; // Let others look at this message also if they want }