From 0231d98ab872121a0d245e05961bf60a96251323 Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Fri, 26 Feb 2021 17:53:06 +0100 Subject: [PATCH] wire "services_enabled" setting --- owrx/service/__init__.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/owrx/service/__init__.py b/owrx/service/__init__.py index 20b05ab..eff5c45 100644 --- a/owrx/service/__init__.py +++ b/owrx/service/__init__.py @@ -69,7 +69,7 @@ class ServiceHandler(SdrSourceEventClient): self.scheduler = None self.source.addClient(self) props = self.source.getProps() - props.filter("center_freq", "samp_rate").wire(self.onFrequencyChange) + self.subscriptions = [props.filter("center_freq", "samp_rate").wire(self.onFrequencyChange)] if self.source.isAvailable(): self.scheduleServiceStartup() self.scheduler = ServiceScheduler(self.source) @@ -98,6 +98,8 @@ class ServiceHandler(SdrSourceEventClient): return mode in configured and mode in available def shutdown(self): + while self.subscriptions: + self.subscriptions.pop().cancel() self.stopServices() self.source.removeClient(self) if self.scheduler: @@ -282,15 +284,20 @@ class Services(object): @staticmethod def start(): - if not Config.get()["services_enabled"]: - return - for source in SdrService.getSources().values(): - props = source.getProps() - if "services" not in props or props["services"] is not False: - Services.handlers.append(ServiceHandler(source)) + config = Config.get() + config.wireProperty("services_enabled", Services._receiveEvent) + + @staticmethod + def _receiveEvent(state): + if state: + for source in SdrService.getSources().values(): + props = source.getProps() + if "services" not in props or props["services"] is not False: + Services.handlers.append(ServiceHandler(source)) + else: + Services.stop() @staticmethod def stop(): - for handler in Services.handlers: - handler.shutdown() - Services.handlers = [] + while Services.handlers: + Services.handlers.pop().shutdown()