diff --git a/src/sensors/sensor.cpp b/src/sensors/sensor.cpp index 040b02a..8483127 100644 --- a/src/sensors/sensor.cpp +++ b/src/sensors/sensor.cpp @@ -7,6 +7,8 @@ SensorStore globalSensors; SensorStore::SensorStore(QObject *parent): QObject(parent) { + sensors_.push_back(Sensor(Sensor::TYPE_DOOR,1,0,"Front door")); + sensors_.push_back(Sensor(Sensor::TYPE_DOOR,0,0,"Bedroom door")); } void SensorStore::store(QJsonObject& json) @@ -67,7 +69,7 @@ void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type sensors_[i].updateSeen(); bool needsUpdate = false; - if(type == SENSOR_UPDATE_USER || type == SENSOR_UPDATE_REMOTE) + if(type == SENSOR_UPDATE_USER) { if(sensors_[i].name != sensor.name || sensors_[i].hidden != sensor.hidden || sensors_[i].groupName != sensor.groupName) { @@ -86,8 +88,27 @@ void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type } needsUpdate = true; } - - if(sensors_[i].field != sensor.field && type == SENSOR_UPDATE_REMOTE) + } + else if(type == SENSOR_UPDATE_REMOTE) + { + if(sensors_[i].name != sensor.name || sensors_[i].hidden != sensor.hidden || sensors_[i].groupName != sensor.groupName) + { + sensors_[i].name = sensor.name; + sensors_[i].hidden = sensor.hidden; + sensors_[i].groupName = sensor.groupName; + for(Sensor& known : knownSensors_) + { + if(sensor.type == known.type && sensor.id == known.id) + { + known.name = sensor.name; + known.hidden = sensor.hidden; + known.groupName = sensor.groupName; + break; + } + } + needsUpdate = true; + } + if(sensors_[i].field != sensor.field) { needsUpdate = true; sensors_[i].field = sensor.field; diff --git a/src/ui/sensorlistwidget.cpp b/src/ui/sensorlistwidget.cpp index dfd0e7c..b411768 100644 --- a/src/ui/sensorlistwidget.cpp +++ b/src/ui/sensorlistwidget.cpp @@ -37,15 +37,15 @@ void SensorListWidget::onDoubleClick(QTreeWidgetItem *item, int column) { if(item && item->type() == 1001) { - Sensor sensor = static_cast(item)->getSensor(); + const Sensor& sensor = static_cast(item)->getSensor(); SensorSettingsDialog diag(sensor, this); if(diag.exec()) { - sensor.name = diag.getName(); - sensor.hidden = diag.getHidden(); - sensor.groupName = diag.getGroupName(); - - globalSensors.sensorGotState(sensor, SENSOR_UPDATE_USER); + Sensor updatedSensor = sensor; + updatedSensor.name = diag.getName(); + updatedSensor.hidden = diag.getHidden(); + updatedSensor.groupName = diag.getGroupName(); + globalSensors.sensorGotState(updatedSensor, SENSOR_UPDATE_USER); } } } @@ -103,7 +103,8 @@ void SensorListWidget::sensorsChanged(std::vector sensors) itemString.append(sensor.getUnit()); } - SensorListItem* sensorItem = new SensorListItem(sensor.name + (sensor.hidden ? " (H)" : ""), sensor); + SensorListItem* sensorItem = new SensorListItem( + sensor.name + (sensor.hidden ? " (H)" : ""), sensor); sensorItem->setText(0, sensor.name + (sensor.hidden ? " (H)" : "")); sensorItem->setText(1, itemString); if(sensor.type <= 128) @@ -123,8 +124,10 @@ void SensorListWidget::sensorsChanged(std::vector sensors) groupItem->setText(0, sensor.groupName); bool wasExpanded = expandedStates.value(sensor.groupName, false); - if(pendingGroupExpandedStates_.contains(sensor.groupName)) - wasExpanded = pendingGroupExpandedStates_.take(sensor.groupName); + if(!wasExpanded && pendingGroupExpandedStates_.contains(sensor.groupName)) + { + wasExpanded = pendingGroupExpandedStates_[sensor.groupName]; + } groupItem->setExpanded(wasExpanded); groupItems[sensor.groupName] = groupItem; }