diff --git a/sdrbase/feature/featurewebapiutils.cpp b/sdrbase/feature/featurewebapiutils.cpp index 9ea3ac870..45832bb96 100644 --- a/sdrbase/feature/featurewebapiutils.cpp +++ b/sdrbase/feature/featurewebapiutils.cpp @@ -210,3 +210,56 @@ bool FeatureWebAPIUtils::satelliteLOS(const QString name) // Not currently required by any features return true; } + +// Open a Sky Map feature and find the specified target +bool FeatureWebAPIUtils::openSkyMapAndFind(const QString& target) +{ + return SkyMapOpener::open(target); +} + +bool SkyMapOpener::open(const QString& target) +{ + // Create a SkyMap feature + MainCore *mainCore = MainCore::instance(); + PluginAPI::FeatureRegistrations *featureRegistrations = mainCore->getPluginManager()->getFeatureRegistrations(); + int nbRegistrations = featureRegistrations->size(); + int index = 0; + + for (; index < nbRegistrations; index++) + { + if (featureRegistrations->at(index).m_featureId == "SkyMap") { + break; + } + } + + if (index < nbRegistrations) + { + new SkyMapOpener(target); + + MainCore::MsgAddFeature *msg = MainCore::MsgAddFeature::create(0, index); + mainCore->getMainMessageQueue()->push(msg); + + return true; + } + else + { + qWarning() << "Sky Map feature not available"; + return false; + } +} + +SkyMapOpener::SkyMapOpener(const QString& target) : + m_target(target) +{ + connect(MainCore::instance(), &MainCore::featureAdded, this, &SkyMapOpener::onSkyMapAdded); +} + +void SkyMapOpener::onSkyMapAdded(int featureSetIndex, Feature *feature) +{ + if (feature->getURI() == "sdrangel.feature.skymap") + { + disconnect(MainCore::instance(), &MainCore::featureAdded, this, &SkyMapOpener::onSkyMapAdded); + FeatureWebAPIUtils::skyMapFind(m_target, featureSetIndex, feature->getIndexInFeatureSet()); + deleteLater(); + } +} diff --git a/sdrbase/feature/featurewebapiutils.h b/sdrbase/feature/featurewebapiutils.h index df6e78c68..2f8d6b32a 100644 --- a/sdrbase/feature/featurewebapiutils.h +++ b/sdrbase/feature/featurewebapiutils.h @@ -27,12 +27,29 @@ class Feature; +class SkyMapOpener : public QObject { + Q_OBJECT + + QString m_target; + +private: + SkyMapOpener(const QString& target); + +public: + static bool open(const QString& target); + +private slots: + void onSkyMapAdded(int featureSetIndex, Feature *feature); + +}; + class SDRBASE_API FeatureWebAPIUtils { public: static bool mapFind(const QString& target, int featureSetIndex=-1, int featureIndex=-1); static bool mapSetDateTime(const QDateTime& dateTime, int featureSetIndex=-1, int featureIndex=-1); static bool skyMapFind(const QString& target, int featureSetIndex=-1, int featureIndex=-1); + static bool openSkyMapAndFind(const QString& target); static Feature *getFeature(int& featureSetIndex, int& featureIndex, const QString& uri); static bool satelliteAOS(const QString name, const QDateTime aos, const QDateTime los); static bool satelliteLOS(const QString name);