#include "sensor.h" #include #include SensorStore globalSensors; QString sensorUpdateTypeToString(sensor_update_type_t type) { switch(type) { case SENSOR_UPDATE_USER: return "User"; case SENSOR_UPDATE_REMOTE: return "Remote"; case SENSOR_UPDATE_BACKEND: return "Backend"; default: return "Invalid"; } } sensor_update_type_t sensorUpdateTypeFromString(const QString& string) { if(string == sensorUpdateTypeToString(SENSOR_UPDATE_USER)) return SENSOR_UPDATE_USER; if(string == sensorUpdateTypeToString(SENSOR_UPDATE_REMOTE)) return SENSOR_UPDATE_REMOTE; if(string == sensorUpdateTypeToString(SENSOR_UPDATE_BACKEND)) return SENSOR_UPDATE_BACKEND; return SENSOR_UPDATE_INVALID; } SensorStore::SensorStore(QObject *parent): QObject(parent) { } void SensorStore::store(QJsonObject& json) { QJsonArray sensorsArray; std::vector sensors = sensors_; for(const Sensor& sensor : knownSensors_) { if(std::find(sensors.begin(), sensors.end(), sensor) == sensors.end()) sensors.push_back(sensor); } 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())); } } std::vector SensorStore::allGroups() const { std::vector groups; for(const Sensor& sensor : sensors_) { if(!sensor.groupName.isEmpty()) { bool found = false; for(const QString& group : groups) { if(group == sensor.groupName) { found = true; break; } } if(!found) groups.push_back(sensor.groupName); } } return groups; } void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type) { bool inSensors = false; qDebug()<<"Sensor update for id"< 0 && sensors_[i].type < 128 && QDateTime::currentDateTime() > sensors_[i].lastSeen.addSecs(1800)) { sensorDeleted(sensors_[i]); stateChenged(sensors_); sensors_.erase(sensors_.begin()+i); } } }