From cc5c130f49695afc3f6f3894885b632c90cf2be1 Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Tue, 24 Mar 2020 00:18:10 +0100 Subject: [PATCH] fix secondary demod; add same-value handling --- owrx/dsp.py | 8 +++++--- owrx/property/__init__.py | 2 ++ test/property/test_property_layer.py | 8 ++++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/owrx/dsp.py b/owrx/dsp.py index 693d12f..29b8088 100644 --- a/owrx/dsp.py +++ b/owrx/dsp.py @@ -41,13 +41,15 @@ class DspManager(csdr.output): "temporary_directory", "center_freq", - # TODO: following properties are set from the client + # TODO: following properties are set from the client; check if it's really necessary to have the Properties "output_rate", "squelch_level", "secondary_mod", "low_cut", "high_cut", "offset_freq", + "mod", + "secondary_offset_freq", ) self.dsp = csdr.dsp(self) @@ -107,8 +109,8 @@ class DspManager(csdr.output): ) self.subscriptions += [ - self.localProps.collect("secondary_mod").wire(set_secondary_mod), - self.localProps.collect("secondary_offset_freq").wire(self.dsp.set_secondary_offset_freq), + self.localProps.wireProperty("secondary_mod", set_secondary_mod), + self.localProps.wireProperty("secondary_offset_freq", self.dsp.set_secondary_offset_freq), ] self.sdrSource.addClient(self) diff --git a/owrx/property/__init__.py b/owrx/property/__init__.py index 6c57a1d..c3c1ec9 100644 --- a/owrx/property/__init__.py +++ b/owrx/property/__init__.py @@ -94,6 +94,8 @@ class PropertyLayer(PropertyManager): return self.properties[name] def __setitem__(self, name, value): + if name in self.properties and self.properties[name] == value: + return logger.debug("property change: %s => %s", name, value) self.properties[name] = value self._fireCallbacks(name, value) diff --git a/test/property/test_property_layer.py b/test/property/test_property_layer.py index b307a39..472c14f 100644 --- a/test/property/test_property_layer.py +++ b/test/property/test_property_layer.py @@ -50,3 +50,11 @@ class PropertyLayerTest(TestCase): mock.method.assert_not_called() pm["testkey"] = "newvalue" mock.method.assert_called_once_with("newvalue") + + def testEventPreventedWhenValueUnchanged(self): + pm = PropertyLayer() + pm["testkey"] = "testvalue" + mock = Mock() + pm.wire(mock.method) + pm["testkey"] = "testvalue" + mock.method.assert_not_called()