Compare commits
No commits in common. "34f129967b84ea3bd8af99ad9831aa67e8724da4" and "51193a5d0b5cea3ecbc487e4cbf281f0754be1cb" have entirely different histories.
34f129967b
...
51193a5d0b
10 changed files with 15 additions and 78 deletions
|
|
@ -67,8 +67,6 @@ void ItemData::storeWithChanges(QJsonObject& json, const ItemFieldChanges& chang
|
||||||
valueNamesArray.append(name);
|
valueNamesArray.append(name);
|
||||||
json["ValueNames"] = valueNamesArray;
|
json["ValueNames"] = valueNamesArray;
|
||||||
}
|
}
|
||||||
if(changes.override)
|
|
||||||
json["override"] = override_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemData::load(const QJsonObject &json, const bool preserve)
|
void ItemData::load(const QJsonObject &json, const bool preserve)
|
||||||
|
|
@ -109,11 +107,6 @@ ItemFieldChanges ItemData::loadWithChanges(const QJsonObject& json, const bool p
|
||||||
valueNames_.push_back(valueNamesArray[i].toString());
|
valueNames_.push_back(valueNamesArray[i].toString());
|
||||||
changes.valueNames = true;
|
changes.valueNames = true;
|
||||||
}
|
}
|
||||||
if(json.contains("override"))
|
|
||||||
{
|
|
||||||
override_ = json["override"].toBool(false);
|
|
||||||
changes.override = true;
|
|
||||||
}
|
|
||||||
itemId_ = static_cast<uint32_t>(json["ItemId"].toDouble(0));
|
itemId_ = static_cast<uint32_t>(json["ItemId"].toDouble(0));
|
||||||
}
|
}
|
||||||
return changes;
|
return changes;
|
||||||
|
|
@ -149,8 +142,6 @@ bool ItemData::hasChanged(const ItemData& other, const ItemFieldChanges& changes
|
||||||
return true;
|
return true;
|
||||||
if(changes.valueNames && other.getValueNames() != getValueNames())
|
if(changes.valueNames && other.getValueNames() != getValueNames())
|
||||||
return true;
|
return true;
|
||||||
if(changes.override && other.getOverride() != getOverride())
|
|
||||||
return true;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -206,16 +197,6 @@ QString ItemData::indexToValueName(int index) const
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ItemData::getOverride() const
|
|
||||||
{
|
|
||||||
return override_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ItemData::setOverride(bool overrideVal)
|
|
||||||
{
|
|
||||||
override_ = overrideVal;
|
|
||||||
}
|
|
||||||
|
|
||||||
//item
|
//item
|
||||||
|
|
||||||
Item::Item(uint32_t itemIdIn, QString name, uint8_t value, QObject *parent): QObject(parent), ItemData (itemIdIn, name,
|
Item::Item(uint32_t itemIdIn, QString name, uint8_t value, QObject *parent): QObject(parent), ItemData (itemIdIn, name,
|
||||||
|
|
@ -236,6 +217,7 @@ Item::~Item()
|
||||||
void Item::store(QJsonObject &json)
|
void Item::store(QJsonObject &json)
|
||||||
{
|
{
|
||||||
ItemData::store(json);
|
ItemData::store(json);
|
||||||
|
json["override"] = override_;
|
||||||
if(!actors_.empty())
|
if(!actors_.empty())
|
||||||
{
|
{
|
||||||
QJsonArray actorsArray;
|
QJsonArray actorsArray;
|
||||||
|
|
@ -255,6 +237,7 @@ void Item::store(QJsonObject &json)
|
||||||
void Item::load(const QJsonObject &json, const bool preserve)
|
void Item::load(const QJsonObject &json, const bool preserve)
|
||||||
{
|
{
|
||||||
ItemData::load(json, preserve);
|
ItemData::load(json, preserve);
|
||||||
|
override_ = json["override"].toBool(false);
|
||||||
if(json.contains("Actors"))
|
if(json.contains("Actors"))
|
||||||
{
|
{
|
||||||
const QJsonArray actorsArray(json["Actors"].toArray(QJsonArray()));
|
const QJsonArray actorsArray(json["Actors"].toArray(QJsonArray()));
|
||||||
|
|
@ -323,8 +306,6 @@ void Item::requestUpdate(ItemUpdateRequest update)
|
||||||
}
|
}
|
||||||
if(update.changes.valueNames)
|
if(update.changes.valueNames)
|
||||||
valueNames_ = update.payload.getValueNames();
|
valueNames_ = update.payload.getValueNames();
|
||||||
if(update.changes.override)
|
|
||||||
override_ = update.payload.getOverride();
|
|
||||||
update.payload = *this;
|
update.payload = *this;
|
||||||
updated(update);
|
updated(update);
|
||||||
}
|
}
|
||||||
|
|
@ -370,12 +351,12 @@ bool Item::removeActor(std::shared_ptr<Actor> actor)
|
||||||
|
|
||||||
void Item::setOverride(const bool in)
|
void Item::setOverride(const bool in)
|
||||||
{
|
{
|
||||||
ItemData::setOverride(in);
|
override_ = in;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Item::getOverride()
|
bool Item::getOverride()
|
||||||
{
|
{
|
||||||
return ItemData::getOverride();
|
return override_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Item::removeAllActors()
|
void Item::removeAllActors()
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,6 @@ protected:
|
||||||
item_value_type_t type_;
|
item_value_type_t type_;
|
||||||
QString groupName_;
|
QString groupName_;
|
||||||
std::vector<QString> valueNames_;
|
std::vector<QString> valueNames_;
|
||||||
bool override_ = false;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ItemData(uint32_t itemIdIn = QRandomGenerator::global()->generate(),
|
ItemData(uint32_t itemIdIn = QRandomGenerator::global()->generate(),
|
||||||
|
|
@ -79,8 +78,6 @@ public:
|
||||||
void storeWithChanges(QJsonObject& json, const ItemFieldChanges& changes);
|
void storeWithChanges(QJsonObject& json, const ItemFieldChanges& changes);
|
||||||
ItemFieldChanges loadWithChanges(const QJsonObject& json, const bool preserve = false);
|
ItemFieldChanges loadWithChanges(const QJsonObject& json, const bool preserve = false);
|
||||||
virtual QString getName() const;
|
virtual QString getName() const;
|
||||||
bool getOverride() const;
|
|
||||||
void setOverride(bool overrideVal);
|
|
||||||
virtual void store(QJsonObject& json);
|
virtual void store(QJsonObject& json);
|
||||||
virtual void load(const QJsonObject& json, const bool preserve = false);
|
virtual void load(const QJsonObject& json, const bool preserve = false);
|
||||||
};
|
};
|
||||||
|
|
@ -90,6 +87,7 @@ class Item: public QObject, public ItemData
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
private:
|
private:
|
||||||
std::vector< std::shared_ptr<Actor> > actors_;
|
std::vector< std::shared_ptr<Actor> > actors_;
|
||||||
|
bool override_ = false;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void updated(ItemUpdateRequest update);
|
void updated(ItemUpdateRequest update);
|
||||||
|
|
@ -137,7 +135,6 @@ struct ItemFieldChanges
|
||||||
bool groupName :1;
|
bool groupName :1;
|
||||||
bool actors :1;
|
bool actors :1;
|
||||||
bool valueNames :1;
|
bool valueNames :1;
|
||||||
bool override :1;
|
|
||||||
ItemFieldChanges(bool defaultVal = false)
|
ItemFieldChanges(bool defaultVal = false)
|
||||||
{
|
{
|
||||||
name = defaultVal;
|
name = defaultVal;
|
||||||
|
|
@ -147,11 +144,10 @@ struct ItemFieldChanges
|
||||||
groupName = defaultVal;
|
groupName = defaultVal;
|
||||||
actors = false;
|
actors = false;
|
||||||
valueNames = defaultVal;
|
valueNames = defaultVal;
|
||||||
override = defaultVal;
|
|
||||||
}
|
}
|
||||||
inline bool isNone() const
|
inline bool isNone() const
|
||||||
{
|
{
|
||||||
return !name && !value && !hidden && !type && !groupName && !actors && !valueNames && !override;
|
return !name && !value && !hidden && !type && !groupName && !actors && !valueNames;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -165,7 +165,6 @@ SecondaryMainObject::SecondaryMainObject(QString host, int port, QObject *parent
|
||||||
{
|
{
|
||||||
connect(tcpClient, &TcpClient::gotSensor, &globalSensors, &SensorStore::sensorGotState);
|
connect(tcpClient, &TcpClient::gotSensor, &globalSensors, &SensorStore::sensorGotState);
|
||||||
globalItems.registerItemSource(tcpClient);
|
globalItems.registerItemSource(tcpClient);
|
||||||
connect(&globalSensors, &SensorStore::sensorChangedState, tcpClient, &TcpClient::sensorEvent);
|
|
||||||
|
|
||||||
if(!tcpClient->launch(QHostAddress(host), port))
|
if(!tcpClient->launch(QHostAddress(host), port))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -89,31 +89,6 @@ void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type
|
||||||
needsUpdate = true;
|
needsUpdate = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(sensors_[i].field != sensor.field)
|
else if(sensors_[i].field != sensor.field)
|
||||||
{
|
{
|
||||||
needsUpdate = true;
|
needsUpdate = true;
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ signals:
|
||||||
void sensorAdded(Sensor sensor, Sensor::sensor_backend_type_t backend, QJsonObject payload);
|
void sensorAdded(Sensor sensor, Sensor::sensor_backend_type_t backend, QJsonObject payload);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
virtual void sensorEvent(Sensor sensor, sensor_update_type_t type);
|
void sensorEvent(Sensor sensor, sensor_update_type_t type);
|
||||||
virtual void itemUpdated(ItemUpdateRequest update);
|
virtual void itemUpdated(ItemUpdateRequest update);
|
||||||
virtual void refresh() override;
|
virtual void refresh() override;
|
||||||
virtual void addSensor(Sensor sensor, Sensor::sensor_backend_type_t backend, QJsonObject payload = {});
|
virtual void addSensor(Sensor sensor, Sensor::sensor_backend_type_t backend, QJsonObject payload = {});
|
||||||
|
|
|
||||||
|
|
@ -128,16 +128,6 @@ void TcpClient::itemUpdated(ItemUpdateRequest update)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TcpClient::sensorEvent(Sensor sensor, sensor_update_type_t type)
|
|
||||||
{
|
|
||||||
// Only forward user-initiated sensor updates to the server
|
|
||||||
// to prevent feedback loops with backend/remote updates
|
|
||||||
if(type == SENSOR_UPDATE_USER)
|
|
||||||
{
|
|
||||||
Service::sensorEvent(sensor, type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TcpClient::~TcpClient()
|
TcpClient::~TcpClient()
|
||||||
{
|
{
|
||||||
delete socket;
|
delete socket;
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ class TcpClient : public Service
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
virtual void itemUpdated(ItemUpdateRequest update) override;
|
virtual void itemUpdated(ItemUpdateRequest update) override;
|
||||||
virtual void sensorEvent(Sensor sensor, sensor_update_type_t type) override;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TcpClient(QObject* parent = nullptr);
|
TcpClient(QObject* parent = nullptr);
|
||||||
|
|
|
||||||
|
|
@ -96,10 +96,7 @@ void ItemSettingsDialog::changeGroup()
|
||||||
|
|
||||||
void ItemSettingsDialog::changeOverride()
|
void ItemSettingsDialog::changeOverride()
|
||||||
{
|
{
|
||||||
ItemUpdateRequest update = item_->createValueUpdateRequest(ITEM_UPDATE_USER);
|
item_->setOverride(ui->checkBox_Override->isChecked());
|
||||||
update.payload.setOverride(ui->checkBox_Override->isChecked());
|
|
||||||
update.changes.override = true;
|
|
||||||
item_->requestUpdate(update);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemSettingsDialog::loadActorList()
|
void ItemSettingsDialog::loadActorList()
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ void SensorListWidget::onDoubleClick(QTreeWidgetItem *item, int column)
|
||||||
{
|
{
|
||||||
if(item && item->type() == 1001)
|
if(item && item->type() == 1001)
|
||||||
{
|
{
|
||||||
const Sensor& sensor = static_cast<SensorListItem*>(item)->getSensor();
|
const Sensor& sensor = getSensorForIndex(currentIndex());
|
||||||
SensorSettingsDialog diag(sensor, this);
|
SensorSettingsDialog diag(sensor, this);
|
||||||
if(diag.exec())
|
if(diag.exec())
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -363,15 +363,15 @@ private slots:
|
||||||
Sensor initialSensor(Sensor::TYPE_TEMPERATURE, 1, 20.0, "Initial Name", false);
|
Sensor initialSensor(Sensor::TYPE_TEMPERATURE, 1, 20.0, "Initial Name", false);
|
||||||
store.sensorGotState(initialSensor, SENSOR_UPDATE_BACKEND);
|
store.sensorGotState(initialSensor, SENSOR_UPDATE_BACKEND);
|
||||||
|
|
||||||
// Send REMOTE update with new name and hidden state (e.g., from secondary instance)
|
// Send REMOTE update with new name and hidden state
|
||||||
Sensor remoteUpdate(Sensor::TYPE_TEMPERATURE, 1, 25.0, "Remote Name", true);
|
Sensor remoteUpdate(Sensor::TYPE_TEMPERATURE, 1, 25.0, "Remote Name", true);
|
||||||
store.sensorGotState(remoteUpdate, SENSOR_UPDATE_REMOTE);
|
store.sensorGotState(remoteUpdate, SENSOR_UPDATE_REMOTE);
|
||||||
|
|
||||||
// Verify name, hidden and field were updated (remote updates should sync user-configurable fields)
|
// Verify name and hidden were NOT updated
|
||||||
std::vector<Sensor>* sensors = store.getSensors();
|
std::vector<Sensor>* sensors = store.getSensors();
|
||||||
QVERIFY(sensors->size() == 1);
|
QVERIFY(sensors->size() == 1);
|
||||||
QVERIFY(sensors->at(0).name == "Remote Name");
|
QVERIFY(sensors->at(0).name == "Initial Name");
|
||||||
QVERIFY(sensors->at(0).hidden == true);
|
QVERIFY(sensors->at(0).hidden == false);
|
||||||
QVERIFY(sensors->at(0).field == 25.0);
|
QVERIFY(sensors->at(0).field == 25.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue