Clean up detector entries that no longer exist when running detection

This commit is contained in:
Adam Honse committed 2026-08-29 15:10:23 -05:00
1 parent e958e0132e
commit c029bb2b1d
1 file changed
+73
+73
View File
@@ -13,6 +13,7 @@
#include <chrono>
#include <cctype>
#include <cstdio>
#include <set>
#include "DetectionManager.h"
#include "JsonUtils.h"
#include "LogManager.h"
@@ -1916,6 +1917,78 @@ void DetectionManager::UpdateDetectorSettings()
}
}
/*-----------------------------------------------------*\
| Loop through the existing detector settings and |
| remove any detectors that no longer exist in the |
| registered detector lists. |
\------------------------------------------------------*/
if(detector_settings.contains("detectors") && detector_settings["detectors"].is_object())
{
std::set<std::string> active_detector_names;
/*-------------------------------------------------*\
| Collect all currently registered detector names |
\--------------------------------------------------*/
for(std::size_t i2c_detector_idx = 0; i2c_detector_idx < i2c_device_detector_strings.size(); i2c_detector_idx++)
{
active_detector_names.insert(i2c_device_detector_strings[i2c_detector_idx]);
}
for(std::size_t i2c_detector_idx = 0; i2c_detector_idx < i2c_dram_device_detectors.size(); i2c_detector_idx++)
{
active_detector_names.insert(i2c_dram_device_detectors[i2c_detector_idx].name);
}
for(std::size_t i2c_pci_detector_idx = 0; i2c_pci_detector_idx < i2c_pci_device_detectors.size(); i2c_pci_detector_idx++)
{
active_detector_names.insert(i2c_pci_device_detectors[i2c_pci_detector_idx].name);
}
for(std::size_t hid_detector_idx = 0; hid_detector_idx < hid_generic_detectors.size(); hid_detector_idx++)
{
active_detector_names.insert(hid_generic_detectors[hid_detector_idx].name);
}
for(std::size_t hid_detector_idx = 0; hid_detector_idx < hid_specific_detectors.size(); hid_detector_idx++)
{
active_detector_names.insert(hid_specific_detectors[hid_detector_idx].name);
}
for(std::size_t hid_wrapped_detector_idx = 0; hid_wrapped_detector_idx < hid_wrapped_generic_detectors.size(); hid_wrapped_detector_idx++)
{
active_detector_names.insert(hid_wrapped_generic_detectors[hid_wrapped_detector_idx].name);
}
for(std::size_t hid_wrapped_detector_idx = 0; hid_wrapped_detector_idx < hid_wrapped_specific_detectors.size(); hid_wrapped_detector_idx++)
{
active_detector_names.insert(hid_wrapped_specific_detectors[hid_wrapped_detector_idx].name);
}
for(std::size_t detector_idx = 0; detector_idx < device_detector_strings.size(); detector_idx++)
{
active_detector_names.insert(device_detector_strings[detector_idx]);
}
/*-------------------------------------------------*\
| Remove stale detector entries |
\--------------------------------------------------*/
json active_detectors;
for(const nlohmann::detail::iteration_proxy_value<nlohmann::json::iterator>& element : detector_settings["detectors"].items())
{
if(active_detector_names.count(element.key()) > 0)
{
active_detectors[element.key()] = element.value();
}
else
{
LOG_INFO("[%s] Removing stale detector \"%s\" from settings", DETECTIONMANAGER, element.key().c_str());
save_settings = true;
}
}
detector_settings["detectors"] = active_detectors;
}
/*-----------------------------------------------------*\
| If there were any setting changes that need to be |
| saved, set the settings in the settings manager and |