diff --git a/plugins/channelrx/radioastronomy/radioastronomy.cpp b/plugins/channelrx/radioastronomy/radioastronomy.cpp index 261d91c39..7254a49f8 100644 --- a/plugins/channelrx/radioastronomy/radioastronomy.cpp +++ b/plugins/channelrx/radioastronomy/radioastronomy.cpp @@ -70,9 +70,9 @@ RadioAstronomy::RadioAstronomy(DeviceAPI *deviceAPI) : ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSink), m_deviceAPI(deviceAPI), m_basebandSampleRate(0), - m_sweeping(false), m_availableFeatureHandler({"sdrangel.feature.startracker"}, QStringList{"startracker.target"}), - m_availableRotatorHandler({"sdrangel.feature.gs232controller"}) + m_availableRotatorHandler({"sdrangel.feature.gs232controller"}), + m_sweeping(false) { qDebug("RadioAstronomy::RadioAstronomy"); setObjectName(m_channelId); diff --git a/plugins/feature/gs232controller/gs232controller.cpp b/plugins/feature/gs232controller/gs232controller.cpp index bc7399006..dff0774c1 100644 --- a/plugins/feature/gs232controller/gs232controller.cpp +++ b/plugins/feature/gs232controller/gs232controller.cpp @@ -286,40 +286,8 @@ void GS232Controller::applySettings(const GS232ControllerSettings& settings, con || (!settings.m_source.isEmpty() && (m_selectedPipe == nullptr)) // Change in available pipes || force) { - MainCore *mainCore = MainCore::instance(); - MessagePipes& messagePipes = mainCore->getMessagePipes(); - - m_availableChannelOrFeatureHandler.deregisterPipes(m_selectedPipe, this, {"target"}); - - /*if (m_selectedPipe) - { - // Don't deref m_selectedPipe, as plugin may have been deleted - qDebug("GS232Controller::applySettings: unregister (%p)", m_selectedPipe); - messagePipes.unregisterProducerToConsumer(m_selectedPipe, this, "target"); - }*/ - - m_selectedPipe = m_availableChannelOrFeatureHandler.registerPipes(settings.m_source, this, {"target"}); - - /*if (!settings.m_source.isEmpty()) - { - int index = m_availableChannelOrFeatures.indexOfLongId(settings.m_source); - - if (index >= 0) - { - QObject *object = m_availableChannelOrFeatures[index].m_object; - registerPipe(object); - m_selectedPipe = object; - } - else - { - m_selectedPipe = nullptr; - qDebug() << "GS232Controller::applySettings: No plugin corresponding to source " << settings.m_source; - } - } - else - { - m_selectedPipe = nullptr; - }*/ + m_availableChannelOrFeatureHandler.deregisterPipes(m_selectedPipe, {"target"}); + m_selectedPipe = m_availableChannelOrFeatureHandler.registerPipes(settings.m_source, {"target"}); } GS232ControllerWorker::MsgConfigureGS232ControllerWorker *msg = GS232ControllerWorker::MsgConfigureGS232ControllerWorker::create( diff --git a/plugins/feature/skymap/skymapgui.cpp b/plugins/feature/skymap/skymapgui.cpp index 80d7be639..1cc7e9655 100644 --- a/plugins/feature/skymap/skymapgui.cpp +++ b/plugins/feature/skymap/skymapgui.cpp @@ -258,6 +258,7 @@ SkyMapGUI::SkyMapGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, Feature * m_resizer.enableChildMouseTracking(); QObject::connect(&m_availableChannelOrFeatureHandler, &AvailableChannelOrFeatureHandler::channelsOrFeaturesChanged, this, &SkyMapGUI::updateSourceList); + QObject::connect(&m_availableChannelOrFeatureHandler, &AvailableChannelOrFeatureHandler::messageEnqueued, this, &SkyMapGUI::handlePipeMessageQueue); m_availableChannelOrFeatureHandler.scanAvailableChannelsAndFeatures(); connect(&m_wtml, &WTML::dataUpdated, this, &SkyMapGUI::wtmlUpdated); @@ -473,10 +474,10 @@ void SkyMapGUI::applySettings(const QStringList& settingsKeys, bool force) m_skymap->getInputMessageQueue()->push(message); m_settingsKeys.clear(); - m_availableChannelOrFeatureHandler.deregisterPipes(m_source, this, {"target", "skymap.target"}); + m_availableChannelOrFeatureHandler.deregisterPipes(m_source, {"target", "skymap.target"}); QObject *oldSource = m_source; - m_source = m_availableChannelOrFeatureHandler.registerPipes(m_settings.m_source, this, {"target", "skymap.target"}); + m_source = m_availableChannelOrFeatureHandler.registerPipes(m_settings.m_source, {"target", "skymap.target"}); // When we change plugins, default to current date and time and My Position, until we get something different if (oldSource && !m_source) @@ -486,7 +487,6 @@ void SkyMapGUI::applySettings(const QStringList& settingsKeys, bool force) MainCore::instance()->getSettings().getLongitude(), MainCore::instance()->getSettings().getAltitude()); } - } } diff --git a/sdrbase/availablechannelorfeaturehandler.cpp b/sdrbase/availablechannelorfeaturehandler.cpp index e8a7a833b..eb08af7ff 100644 --- a/sdrbase/availablechannelorfeaturehandler.cpp +++ b/sdrbase/availablechannelorfeaturehandler.cpp @@ -89,7 +89,7 @@ void AvailableChannelOrFeatureHandler::scanAvailableChannelsAndFeatures() } } -QObject* AvailableChannelOrFeatureHandler::registerPipes(const QString& longIdFrom, QObject* to, const QStringList& pipeNames) +QObject* AvailableChannelOrFeatureHandler::registerPipes(const QString& longIdFrom, const QStringList& pipeNames) { int index = m_availableChannelOrFeatureList.indexOfLongId(longIdFrom); if (index >= 0) @@ -106,14 +106,16 @@ QObject* AvailableChannelOrFeatureHandler::registerPipes(const QString& longIdFr } } -void AvailableChannelOrFeatureHandler::deregisterPipes(QObject* from, QObject* to, const QStringList& pipeNames) +void AvailableChannelOrFeatureHandler::deregisterPipes(QObject* from, const QStringList& pipeNames) { // Don't dereference 'from' here, as it may have been deleted if (from) { qDebug("AvailableChannelOrFeatureHandler::deregisterPipes: unregister (%p)", from); MessagePipes& messagePipes = MainCore::instance()->getMessagePipes(); - messagePipes.unregisterProducerToConsumer(from, to, "target"); + for (const auto& pipeName : pipeNames) { + messagePipes.unregisterProducerToConsumer(from, this, pipeName); + } } } diff --git a/sdrbase/availablechannelorfeaturehandler.h b/sdrbase/availablechannelorfeaturehandler.h index b949e1886..6c94c7c50 100644 --- a/sdrbase/availablechannelorfeaturehandler.h +++ b/sdrbase/availablechannelorfeaturehandler.h @@ -55,8 +55,8 @@ public: return m_availableChannelOrFeatureList; } - QObject* registerPipes(const QString& longIdFrom, QObject* to, const QStringList& pipeNames); - void deregisterPipes(QObject* from, QObject* to, const QStringList& pipeNames); + QObject* registerPipes(const QString& longIdFrom, const QStringList& pipeNames); + void deregisterPipes(QObject* from, const QStringList& pipeNames); private: