diff --git a/src/items/item.cpp b/src/items/item.cpp index 6b2eb5b..0ff8cd5 100644 --- a/src/items/item.cpp +++ b/src/items/item.cpp @@ -67,8 +67,6 @@ void ItemData::storeWithChanges(QJsonObject& json, const ItemFieldChanges& chang valueNamesArray.append(name); json["ValueNames"] = valueNamesArray; } - if(changes.override) - json["override"] = override_; } 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()); changes.valueNames = true; } - if(json.contains("override")) - { - override_ = json["override"].toBool(false); - changes.override = true; - } itemId_ = static_cast(json["ItemId"].toDouble(0)); } return changes; @@ -149,8 +142,6 @@ bool ItemData::hasChanged(const ItemData& other, const ItemFieldChanges& changes return true; if(changes.valueNames && other.getValueNames() != getValueNames()) return true; - if(changes.override && other.getOverride() != getOverride()) - return true; return false; } @@ -206,16 +197,6 @@ QString ItemData::indexToValueName(int index) const return QString(); } -bool ItemData::getOverride() const -{ - return override_; -} - -void ItemData::setOverride(bool overrideVal) -{ - override_ = overrideVal; -} - //item 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) { ItemData::store(json); + json["override"] = override_; if(!actors_.empty()) { QJsonArray actorsArray; @@ -255,6 +237,7 @@ void Item::store(QJsonObject &json) void Item::load(const QJsonObject &json, const bool preserve) { ItemData::load(json, preserve); + override_ = json["override"].toBool(false); if(json.contains("Actors")) { const QJsonArray actorsArray(json["Actors"].toArray(QJsonArray())); @@ -323,8 +306,6 @@ void Item::requestUpdate(ItemUpdateRequest update) } if(update.changes.valueNames) valueNames_ = update.payload.getValueNames(); - if(update.changes.override) - override_ = update.payload.getOverride(); update.payload = *this; updated(update); } @@ -370,12 +351,12 @@ bool Item::removeActor(std::shared_ptr actor) void Item::setOverride(const bool in) { - ItemData::setOverride(in); + override_ = in; } bool Item::getOverride() { - return ItemData::getOverride(); + return override_; } void Item::removeAllActors() diff --git a/src/items/item.h b/src/items/item.h index 6ddf6ef..4a70fae 100644 --- a/src/items/item.h +++ b/src/items/item.h @@ -38,7 +38,6 @@ protected: item_value_type_t type_; QString groupName_; std::vector valueNames_; - bool override_ = false; public: ItemData(uint32_t itemIdIn = QRandomGenerator::global()->generate(), @@ -79,8 +78,6 @@ public: void storeWithChanges(QJsonObject& json, const ItemFieldChanges& changes); ItemFieldChanges loadWithChanges(const QJsonObject& json, const bool preserve = false); virtual QString getName() const; - bool getOverride() const; - void setOverride(bool overrideVal); virtual void store(QJsonObject& json); virtual void load(const QJsonObject& json, const bool preserve = false); }; @@ -90,6 +87,7 @@ class Item: public QObject, public ItemData Q_OBJECT private: std::vector< std::shared_ptr > actors_; + bool override_ = false; signals: void updated(ItemUpdateRequest update); @@ -137,7 +135,6 @@ struct ItemFieldChanges bool groupName :1; bool actors :1; bool valueNames :1; - bool override :1; ItemFieldChanges(bool defaultVal = false) { name = defaultVal; @@ -147,11 +144,10 @@ struct ItemFieldChanges groupName = defaultVal; actors = false; valueNames = defaultVal; - override = defaultVal; } inline bool isNone() const { - return !name && !value && !hidden && !type && !groupName && !actors && !valueNames && !override; + return !name && !value && !hidden && !type && !groupName && !actors && !valueNames; } }; diff --git a/src/mainobject.cpp b/src/mainobject.cpp index b70b891..103c8de 100644 --- a/src/mainobject.cpp +++ b/src/mainobject.cpp @@ -165,7 +165,6 @@ SecondaryMainObject::SecondaryMainObject(QString host, int port, QObject *parent { connect(tcpClient, &TcpClient::gotSensor, &globalSensors, &SensorStore::sensorGotState); globalItems.registerItemSource(tcpClient); - connect(&globalSensors, &SensorStore::sensorChangedState, tcpClient, &TcpClient::sensorEvent); if(!tcpClient->launch(QHostAddress(host), port)) { diff --git a/src/sensors/sensor.cpp b/src/sensors/sensor.cpp index 8483127..de07db4 100644 --- a/src/sensors/sensor.cpp +++ b/src/sensors/sensor.cpp @@ -89,31 +89,6 @@ void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type 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) { needsUpdate = true; diff --git a/src/service/service.h b/src/service/service.h index fcd2201..7b96e1b 100644 --- a/src/service/service.h +++ b/src/service/service.h @@ -24,7 +24,7 @@ signals: void sensorAdded(Sensor sensor, Sensor::sensor_backend_type_t backend, QJsonObject payload); 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 refresh() override; virtual void addSensor(Sensor sensor, Sensor::sensor_backend_type_t backend, QJsonObject payload = {}); diff --git a/src/service/tcpclient.cpp b/src/service/tcpclient.cpp index ef2fc66..6e00e2d 100644 --- a/src/service/tcpclient.cpp +++ b/src/service/tcpclient.cpp @@ -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() { delete socket; diff --git a/src/service/tcpclient.h b/src/service/tcpclient.h index 4e56e6b..b67f7b4 100644 --- a/src/service/tcpclient.h +++ b/src/service/tcpclient.h @@ -18,7 +18,6 @@ class TcpClient : public Service public slots: virtual void itemUpdated(ItemUpdateRequest update) override; - virtual void sensorEvent(Sensor sensor, sensor_update_type_t type) override; public: TcpClient(QObject* parent = nullptr); diff --git a/src/ui/itemsettingsdialog.cpp b/src/ui/itemsettingsdialog.cpp index adc3b06..d517312 100644 --- a/src/ui/itemsettingsdialog.cpp +++ b/src/ui/itemsettingsdialog.cpp @@ -96,10 +96,7 @@ void ItemSettingsDialog::changeGroup() void ItemSettingsDialog::changeOverride() { - ItemUpdateRequest update = item_->createValueUpdateRequest(ITEM_UPDATE_USER); - update.payload.setOverride(ui->checkBox_Override->isChecked()); - update.changes.override = true; - item_->requestUpdate(update); + item_->setOverride(ui->checkBox_Override->isChecked()); } void ItemSettingsDialog::loadActorList() diff --git a/src/ui/sensorlistwidget.cpp b/src/ui/sensorlistwidget.cpp index b411768..f9a24b5 100644 --- a/src/ui/sensorlistwidget.cpp +++ b/src/ui/sensorlistwidget.cpp @@ -37,7 +37,7 @@ void SensorListWidget::onDoubleClick(QTreeWidgetItem *item, int column) { if(item && item->type() == 1001) { - const Sensor& sensor = static_cast(item)->getSensor(); + const Sensor& sensor = getSensorForIndex(currentIndex()); SensorSettingsDialog diag(sensor, this); if(diag.exec()) { diff --git a/tests/unit/sensors/test_sensor.cpp b/tests/unit/sensors/test_sensor.cpp index deb14e3..e604f15 100644 --- a/tests/unit/sensors/test_sensor.cpp +++ b/tests/unit/sensors/test_sensor.cpp @@ -362,16 +362,16 @@ private slots: // Add initial sensor Sensor initialSensor(Sensor::TYPE_TEMPERATURE, 1, 20.0, "Initial Name", false); 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); 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* sensors = store.getSensors(); QVERIFY(sensors->size() == 1); - QVERIFY(sensors->at(0).name == "Remote Name"); - QVERIFY(sensors->at(0).hidden == true); + QVERIFY(sensors->at(0).name == "Initial Name"); + QVERIFY(sensors->at(0).hidden == false); QVERIFY(sensors->at(0).field == 25.0); }