mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-21 02:02:23 +00:00
Persist favourites on NodeDB reset (#8292)
* Conditionally delete favourited nodes on reset * trunk fmt * Fix equality check, use existing macro for role validation * Extend favourite persistence setting to devices of all roles * Refactor: Decoupled role/config check and set role defaults appropriately * Use American-English spelling * Use existing reference * Convert reset to bool, regen protos * Add optional arg to nodedb_reset in favor of additional device setting * Use correct proto commit ID * Regen protos * Log preservation status * Pull latest from master
This commit is contained in:
@@ -978,12 +978,25 @@ void NodeDB::installDefaultChannels()
|
|||||||
channelFile.version = DEVICESTATE_CUR_VER;
|
channelFile.version = DEVICESTATE_CUR_VER;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodeDB::resetNodes()
|
void NodeDB::resetNodes(bool keepFavorites)
|
||||||
{
|
{
|
||||||
if (!config.position.fixed_position)
|
if (!config.position.fixed_position)
|
||||||
clearLocalPosition();
|
clearLocalPosition();
|
||||||
numMeshNodes = 1;
|
numMeshNodes = 1;
|
||||||
|
if (keepFavorites) {
|
||||||
|
LOG_INFO("Clearing node database - preserving favorites");
|
||||||
|
for (size_t i = 0; i < meshNodes->size(); i++) {
|
||||||
|
meshtastic_NodeInfoLite &node = meshNodes->at(i);
|
||||||
|
if (i > 0 && !node.is_favorite) {
|
||||||
|
node = meshtastic_NodeInfoLite();
|
||||||
|
} else {
|
||||||
|
numMeshNodes += 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
LOG_INFO("Clearing node database - removing favorites");
|
||||||
std::fill(nodeDatabase.nodes.begin() + 1, nodeDatabase.nodes.end(), meshtastic_NodeInfoLite());
|
std::fill(nodeDatabase.nodes.begin() + 1, nodeDatabase.nodes.end(), meshtastic_NodeInfoLite());
|
||||||
|
}
|
||||||
devicestate.has_rx_text_message = false;
|
devicestate.has_rx_text_message = false;
|
||||||
devicestate.has_rx_waypoint = false;
|
devicestate.has_rx_waypoint = false;
|
||||||
saveNodeDatabaseToDisk();
|
saveNodeDatabaseToDisk();
|
||||||
|
|||||||
@@ -229,7 +229,8 @@ class NodeDB
|
|||||||
*/
|
*/
|
||||||
size_t getNumOnlineMeshNodes(bool localOnly = false);
|
size_t getNumOnlineMeshNodes(bool localOnly = false);
|
||||||
|
|
||||||
void initConfigIntervals(), initModuleConfigIntervals(), resetNodes(), removeNodeByNum(NodeNum nodeNum);
|
void initConfigIntervals(), initModuleConfigIntervals(), resetNodes(bool keepFavorites = false),
|
||||||
|
removeNodeByNum(NodeNum nodeNum);
|
||||||
|
|
||||||
bool factoryReset(bool eraseBleBonds = false);
|
bool factoryReset(bool eraseBleBonds = false);
|
||||||
|
|
||||||
|
|||||||
@@ -289,7 +289,12 @@ bool AdminModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshta
|
|||||||
case meshtastic_AdminMessage_nodedb_reset_tag: {
|
case meshtastic_AdminMessage_nodedb_reset_tag: {
|
||||||
disableBluetooth();
|
disableBluetooth();
|
||||||
LOG_INFO("Initiate node-db reset");
|
LOG_INFO("Initiate node-db reset");
|
||||||
nodeDB->resetNodes();
|
// CLIENT_BASE, ROUTER and ROUTER_LATE are able to preserve the remaining hop count when relaying a packet via a
|
||||||
|
// favorited node, so ensure that their favorites are kept on reset
|
||||||
|
bool rolePreference =
|
||||||
|
isOneOf(config.device.role, meshtastic_Config_DeviceConfig_Role_CLIENT_BASE,
|
||||||
|
meshtastic_Config_DeviceConfig_Role_ROUTER, meshtastic_Config_DeviceConfig_Role_ROUTER_LATE);
|
||||||
|
nodeDB->resetNodes(rolePreference ? rolePreference : r->nodedb_reset);
|
||||||
reboot(DEFAULT_REBOOT_SECONDS);
|
reboot(DEFAULT_REBOOT_SECONDS);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user