diff --git a/htdocs/openwebrx.js b/htdocs/openwebrx.js index b6343fd..0c535ba 100644 --- a/htdocs/openwebrx.js +++ b/htdocs/openwebrx.js @@ -800,6 +800,12 @@ function on_ws_recv(evt) { return '"; }).join("")); $('#openwebrx-sdr-profiles-listbox').val(currentprofile.toString()); + // this is a bit hacky since it only makes sense if the error is actually "no sdr devices" + // the only other error condition for which the overlay is used right now is "too many users" + // so there shouldn't be a problem here + if (json['value'].keys()) { + $('#openwebrx-error-overlay').hide(); + } break; case "features": Modes.setFeatures(json['value']); @@ -836,6 +842,7 @@ function on_ws_recv(evt) { var $overlay = $('#openwebrx-error-overlay'); $overlay.find('.errormessage').text(json['value']); $overlay.show(); + $("#openwebrx-panel-receiver").demodulatorPanel().stopDemodulator(); break; case 'secondary_demod': secondary_demod_push_data(json['value']); diff --git a/owrx/connection.py b/owrx/connection.py index c90e41b..b09a505 100644 --- a/owrx/connection.py +++ b/owrx/connection.py @@ -325,6 +325,7 @@ class OpenWebRxReceiverClient(OpenWebRxClient, SdrSourceEventClient): self.sdr.addSpectrumClient(self) def handleNoSdrsAvailable(self): + self.stack.removeLayerByPriority(0) self.write_sdr_error("No SDR Devices available") def startDsp(self): diff --git a/owrx/property/__init__.py b/owrx/property/__init__.py index 88d80f4..a38c592 100644 --- a/owrx/property/__init__.py +++ b/owrx/property/__init__.py @@ -294,6 +294,11 @@ class PropertyStack(PropertyManager): return changes + def removeLayerByPriority(self, priority): + for layer in self.layers: + if layer["priority"] == priority: + self.removeLayer(layer["props"]) + def removeLayer(self, pm: PropertyManager): for layer in self.layers: if layer["props"] == pm: diff --git a/test/property/test_property_stack.py b/test/property/test_property_stack.py index f3c3a12..860f13f 100644 --- a/test/property/test_property_stack.py +++ b/test/property/test_property_stack.py @@ -42,6 +42,18 @@ class PropertyStackTest(TestCase): om.removeLayer(high_pm) self.assertEqual(om["testkey"], "low value") + def testLayerRemovalByPriority(self): + om = PropertyStack() + low_pm = PropertyLayer() + high_pm = PropertyLayer() + low_pm["testkey"] = "low value" + high_pm["testkey"] = "high value" + om.addLayer(1, low_pm) + om.addLayer(0, high_pm) + self.assertEqual(om["testkey"], "high value") + om.removeLayerByPriority(0) + self.assertEqual(om["testkey"], "low value") + def testPropertyChange(self): layer = PropertyLayer() stack = PropertyStack()