Sensor: improve update handling

This commit is contained in:
Carl Philipp Klemm 2026-04-25 23:43:59 +02:00
parent f2b2e8f0a0
commit a07b019a22

View file

@ -59,20 +59,23 @@ std::vector<QString> SensorStore::allGroups() const
void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type) void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type)
{ {
bool inSensors = false; bool inSensors = false;
qDebug()<<"Sensor update for id"<<sensor.id<<"type"<<sensor.type<<"update type"<<type<<"for"<<sensor.name<<"with group"<<sensor.groupName;
for(unsigned i = 0; i < sensors_.size(); ++i) for(unsigned i = 0; i < sensors_.size(); ++i)
{ {
if(sensor.type == sensors_[i].type && sensor.id == sensors_[i].id) if(sensor.type == sensors_[i].type && sensor.id == sensors_[i].id)
{ {
sensors_[i].updateSeen(); sensors_[i].updateSeen();
if(sensors_[i].field != sensor.field) bool needsUpdate = false;
{
sensors_[i].field = sensor.field;
if(type == SENSOR_UPDATE_USER) if(type == SENSOR_UPDATE_USER)
{
if(sensors_[i].name != sensor.name || sensors_[i].hidden != sensor.hidden || sensors_[i].groupName != sensor.groupName)
{ {
sensors_[i].name = sensor.name; sensors_[i].name = sensor.name;
sensors_[i].hidden = sensor.hidden; sensors_[i].hidden = sensor.hidden;
sensors_[i].groupName = sensor.groupName; sensors_[i].groupName = sensor.groupName;
// Also update knownSensors_
for(Sensor& known : knownSensors_) for(Sensor& known : knownSensors_)
{ {
if(sensor.type == known.type && sensor.id == known.id) if(sensor.type == known.type && sensor.id == known.id)
@ -83,10 +86,21 @@ void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type
break; break;
} }
} }
needsUpdate = true;
} }
}
else if(sensors_[i].field != sensor.field)
{
needsUpdate = true;
sensors_[i].field = sensor.field;
}
if(needsUpdate)
{
sensorChangedState(sensors_[i], type); sensorChangedState(sensors_[i], type);
stateChenged(sensors_); stateChenged(sensors_);
} }
inSensors = true; inSensors = true;
break; break;
} }
@ -94,7 +108,6 @@ void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type
if(!inSensors) if(!inSensors)
{ {
Sensor newSensor = sensor; Sensor newSensor = sensor;
// Check knownSensors_ for matching sensor to override name and hidden state
for(const Sensor& known : knownSensors_) for(const Sensor& known : knownSensors_)
{ {
if(sensor.type == known.type && sensor.id == known.id) if(sensor.type == known.type && sensor.id == known.id)