diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index dec8411fe..639e5bc45 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -402,6 +402,11 @@ NodeDB::NodeDB() config.position.gps_mode = meshtastic_Config_PositionConfig_GpsMode_ENABLED; config.position.gps_enabled = 0; } + if (config.device.role == meshtastic_Config_DeviceConfig_Role_CLIENT_BASE || + config.device.role == meshtastic_Config_DeviceConfig_Role_ROUTER || + config.device.role == meshtastic_Config_DeviceConfig_Role_ROUTER_LATE) { + saveFavourites == true; + } #ifdef USERPREFS_FIRMWARE_EDITION myNodeInfo.firmware_edition = USERPREFS_FIRMWARE_EDITION; #endif @@ -983,7 +988,18 @@ void NodeDB::resetNodes() if (!config.position.fixed_position) clearLocalPosition(); numMeshNodes = 1; - std::fill(nodeDatabase.nodes.begin() + 1, nodeDatabase.nodes.end(), meshtastic_NodeInfoLite()); + if (saveFavourites) { + for (size_t i = 0; i < nodeDatabase.nodes.size(); i++) { + meshtastic_NodeInfoLite &node = nodeDatabase.nodes[i]; + if (i > 0 && !node.is_favorite) { + node = meshtastic_NodeInfoLite(); + } else { + numMeshNodes += 1; + } + }; + } else { + std::fill(nodeDatabase.nodes.begin() + 1, nodeDatabase.nodes.end(), meshtastic_NodeInfoLite()); + } devicestate.has_rx_text_message = false; devicestate.has_rx_waypoint = false; saveNodeDatabaseToDisk(); diff --git a/src/mesh/NodeDB.h b/src/mesh/NodeDB.h index e8724f2c9..a1722a403 100644 --- a/src/mesh/NodeDB.h +++ b/src/mesh/NodeDB.h @@ -144,6 +144,8 @@ class NodeDB bool keyIsLowEntropy = false; bool hasWarned = false; + bool saveFavourites = false; + /// don't do mesh based algorithm for node id assignment (initially) /// instead just store in flash - possibly even in the initial alpha release do this hack NodeDB();