Support different Sensor update types
This commit is contained in:
parent
ff07551a59
commit
09f7e55b4e
20 changed files with 258 additions and 41 deletions
|
|
@ -1,6 +1,7 @@
|
|||
#include "sensor.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QJsonArray>
|
||||
|
||||
SensorStore globalSensors;
|
||||
|
||||
|
|
@ -10,9 +11,31 @@ SensorStore::SensorStore(QObject *parent): QObject(parent)
|
|||
sensors_.push_back(Sensor(Sensor::TYPE_DOOR,0,0,"Bedroom door"));
|
||||
}
|
||||
|
||||
void SensorStore::sensorGotState(const Sensor& sensor)
|
||||
void SensorStore::store(QJsonObject& json)
|
||||
{
|
||||
bool exsisting = false;
|
||||
QJsonArray sensorsArray;
|
||||
for(const Sensor& sensor : sensors_)
|
||||
{
|
||||
QJsonObject sensorObject;
|
||||
sensor.store(sensorObject);
|
||||
sensorsArray.append(sensorObject);
|
||||
}
|
||||
json["Sensors"] = sensorsArray;
|
||||
}
|
||||
|
||||
void SensorStore::load(const QJsonObject& json)
|
||||
{
|
||||
knownSensors_.clear();
|
||||
QJsonArray sensorsArray = json["Sensors"].toArray();
|
||||
for(const QJsonValue& value : sensorsArray)
|
||||
{
|
||||
knownSensors_.push_back(Sensor(value.toObject()));
|
||||
}
|
||||
}
|
||||
|
||||
void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type)
|
||||
{
|
||||
bool inSensors = false;
|
||||
for(unsigned i = 0; i < sensors_.size(); ++i)
|
||||
{
|
||||
if(sensor.type == sensors_[i].type && sensor.id == sensors_[i].id)
|
||||
|
|
@ -21,17 +44,43 @@ void SensorStore::sensorGotState(const Sensor& sensor)
|
|||
if(sensors_[i].field != sensor.field)
|
||||
{
|
||||
sensors_[i].field = sensor.field;
|
||||
sensorChangedState(sensor);
|
||||
if(type == SENSOR_UPDATE_USER)
|
||||
{
|
||||
sensors_[i].name = sensor.name;
|
||||
sensors_[i].hidden = sensor.hidden;
|
||||
// Also update knownSensors_
|
||||
for(Sensor& known : knownSensors_)
|
||||
{
|
||||
if(sensor.type == known.type && sensor.id == known.id)
|
||||
{
|
||||
known.name = sensor.name;
|
||||
known.hidden = sensor.hidden;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
sensorChangedState(sensors_[i], type);
|
||||
stateChenged(sensors_);
|
||||
}
|
||||
exsisting = true;
|
||||
inSensors = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!exsisting)
|
||||
if(!inSensors)
|
||||
{
|
||||
sensors_.push_back(sensor);
|
||||
sensorChangedState(sensor);
|
||||
Sensor newSensor = sensor;
|
||||
// Check knownSensors_ for matching sensor to override name and hidden state
|
||||
for(const Sensor& known : knownSensors_)
|
||||
{
|
||||
if(sensor.type == known.type && sensor.id == known.id)
|
||||
{
|
||||
newSensor.name = known.name;
|
||||
newSensor.hidden = known.hidden;
|
||||
break;
|
||||
}
|
||||
}
|
||||
sensors_.push_back(newSensor);
|
||||
sensorChangedState(newSensor, type);
|
||||
stateChenged(sensors_);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue