From c029bb2b1dde930f413da55b4b606fdf18efcfa4 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Sat, 29 Aug 2026 15:09:22 -0500 Subject: [PATCH] Clean up detector entries that no longer exist when running detection --- DetectionManager.cpp | 73 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/DetectionManager.cpp b/DetectionManager.cpp index 1b20a470d..9d55ebf03 100644 --- a/DetectionManager.cpp +++ b/DetectionManager.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #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 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& 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 |