From 7562d847ceab776cd990f740224b6c95b62eb131 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 20 Nov 2022 20:14:07 +0100 Subject: [PATCH] AMBE feature: Make settings assignments atomic. Part of #1329 --- plugins/feature/afc/afcgui.cpp | 2 + plugins/feature/ais/aisgui.cpp | 2 + plugins/feature/ambe/ambe.cpp | 21 ++++++---- plugins/feature/ambe/ambe.h | 13 +++--- plugins/feature/ambe/ambegui.cpp | 20 ++++++++- plugins/feature/ambe/ambegui.h | 1 + plugins/feature/ambe/ambesettings.cpp | 60 +++++++++++++++++++++++++++ plugins/feature/ambe/ambesettings.h | 2 + 8 files changed, 105 insertions(+), 16 deletions(-) diff --git a/plugins/feature/afc/afcgui.cpp b/plugins/feature/afc/afcgui.cpp index 55b601cbd..8fa3bd289 100644 --- a/plugins/feature/afc/afcgui.cpp +++ b/plugins/feature/afc/afcgui.cpp @@ -299,6 +299,8 @@ void AFCGUI::onMenuDialogCalled(const QPoint &p) setTitle(m_settings.m_title); setTitleColor(m_settings.m_rgbColor); + m_settingsKeys.append("title"); + m_settingsKeys.append("rgbColor"); m_settingsKeys.append("useReverseAPI"); m_settingsKeys.append("reverseAPIAddress"); m_settingsKeys.append("reverseAPIPort"); diff --git a/plugins/feature/ais/aisgui.cpp b/plugins/feature/ais/aisgui.cpp index bebabf90f..ceacad050 100644 --- a/plugins/feature/ais/aisgui.cpp +++ b/plugins/feature/ais/aisgui.cpp @@ -303,6 +303,8 @@ void AISGUI::onMenuDialogCalled(const QPoint &p) setTitle(m_settings.m_title); setTitleColor(m_settings.m_rgbColor); + m_settingsKeys.append("title"); + m_settingsKeys.append("rgbColor"); m_settingsKeys.append("useReverseAPI"); m_settingsKeys.append("reverseAPIAddress"); m_settingsKeys.append("reverseAPIPort"); diff --git a/plugins/feature/ambe/ambe.cpp b/plugins/feature/ambe/ambe.cpp index b75ba8179..ad2c0ccc0 100644 --- a/plugins/feature/ambe/ambe.cpp +++ b/plugins/feature/ambe/ambe.cpp @@ -77,10 +77,13 @@ void AMBE::stop() m_state = StIdle; } -void AMBE::applySettings(const AMBESettings& settings, bool force) +void AMBE::applySettings(const AMBESettings& settings, const QList& settingsKeys, bool force) { - (void) force; - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } bool AMBE::handleMessage(const Message& cmd) @@ -89,7 +92,7 @@ bool AMBE::handleMessage(const Message& cmd) { MsgConfigureAMBE& cfg = (MsgConfigureAMBE&) cmd; qDebug() << "AMBE::handleMessage: MsgConfigureAMBE"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettings(), cfg.getSettingsKeys(), cfg.getForce()); return true; } else if (DSPPushMbeFrame::match(cmd)) @@ -134,14 +137,14 @@ bool AMBE::deserialize(const QByteArray& data) if (m_settings.deserialize(bytetmp)) { - MsgConfigureAMBE *msg = MsgConfigureAMBE::create(m_settings, true); + MsgConfigureAMBE *msg = MsgConfigureAMBE::create(m_settings, QList(), true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureAMBE *msg = MsgConfigureAMBE::create(m_settings, true); + MsgConfigureAMBE *msg = MsgConfigureAMBE::create(m_settings, QList(), true); m_inputMessageQueue.push(msg); return false; } @@ -194,12 +197,12 @@ int AMBE::webapiSettingsPutPatch( AMBESettings settings = m_settings; webapiUpdateFeatureSettings(settings, featureSettingsKeys, response); - MsgConfigureAMBE *msg = MsgConfigureAMBE::create(settings, force); + MsgConfigureAMBE *msg = MsgConfigureAMBE::create(settings, featureSettingsKeys, force); m_inputMessageQueue.push(msg); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureAMBE *msgToGUI = MsgConfigureAMBE::create(settings, force); + MsgConfigureAMBE *msgToGUI = MsgConfigureAMBE::create(settings, featureSettingsKeys, force); m_guiMessageQueue->push(msgToGUI); } @@ -288,7 +291,7 @@ void AMBE::webapiUpdateFeatureSettings( } } -void AMBE::webapiReverseSendSettings(QList& featureSettingsKeys, const AMBESettings& settings, bool force) +void AMBE::webapiReverseSendSettings(const QList& featureSettingsKeys, const AMBESettings& settings, bool force) { SWGSDRangel::SWGFeatureSettings *swgFeatureSettings = new SWGSDRangel::SWGFeatureSettings(); // swgFeatureSettings->setOriginatorFeatureIndex(getIndexInDeviceSet()); diff --git a/plugins/feature/ambe/ambe.h b/plugins/feature/ambe/ambe.h index e4e317669..ab8130a50 100644 --- a/plugins/feature/ambe/ambe.h +++ b/plugins/feature/ambe/ambe.h @@ -40,19 +40,22 @@ public: public: const AMBESettings& getSettings() const { return m_settings; } + const QList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureAMBE* create(const AMBESettings& settings, bool force) { - return new MsgConfigureAMBE(settings, force); + static MsgConfigureAMBE* create(const AMBESettings& settings, const QList& settingsKeys, bool force) { + return new MsgConfigureAMBE(settings, settingsKeys, force); } private: AMBESettings m_settings; + QList m_settingsKeys; bool m_force; - MsgConfigureAMBE(const AMBESettings& settings, bool force) : + MsgConfigureAMBE(const AMBESettings& settings, const QList& settingsKeys, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -131,9 +134,9 @@ private: void start(); void stop(); - void applySettings(const AMBESettings& settings, bool force = false); + void applySettings(const AMBESettings& settings, const QList& settingsKeys, bool force = false); void webapiFormatFeatureReport(SWGSDRangel::SWGFeatureReport& response); - void webapiReverseSendSettings(QList& featureSettingsKeys, const AMBESettings& settings, bool force); + void webapiReverseSendSettings(const QList& featureSettingsKeys, const AMBESettings& settings, bool force); private slots: void networkManagerFinished(QNetworkReply *reply); diff --git a/plugins/feature/ambe/ambegui.cpp b/plugins/feature/ambe/ambegui.cpp index 6244a69b3..91eede6ce 100644 --- a/plugins/feature/ambe/ambegui.cpp +++ b/plugins/feature/ambe/ambegui.cpp @@ -137,6 +137,14 @@ void AMBEGUI::onMenuDialogCalled(const QPoint &p) setTitle(m_settings.m_title); setTitleColor(m_settings.m_rgbColor); + m_settingsKeys.append("title"); + m_settingsKeys.append("rgbColor"); + m_settingsKeys.append("useReverseAPI"); + m_settingsKeys.append("reverseAPIAddress"); + m_settingsKeys.append("reverseAPIPort"); + m_settingsKeys.append("reverseAPIFeatureSetIndex"); + m_settingsKeys.append("reverseAPIFeatureIndex"); + applySettings(); } @@ -154,9 +162,11 @@ void AMBEGUI::applySettings(bool force) { if (m_doApplySettings) { - AMBE::MsgConfigureAMBE* message = AMBE::MsgConfigureAMBE::create( m_settings, force); + AMBE::MsgConfigureAMBE* message = AMBE::MsgConfigureAMBE::create( m_settings, m_settingsKeys, force); m_ambe->getInputMessageQueue()->push(message); } + + m_settingsKeys.clear(); } bool AMBEGUI::handleMessage(const Message& message) @@ -165,7 +175,13 @@ bool AMBEGUI::handleMessage(const Message& message) { qDebug("AMBEGUI::handleMessage: AMBE::MsgConfigureAMBE"); const AMBE::MsgConfigureAMBE& cfg = (AMBE::MsgConfigureAMBE&) message; - m_settings = cfg.getSettings(); + + if (cfg.getForce()) { + m_settings = cfg.getSettings(); + } else { + m_settings.applySettings(cfg.getSettingsKeys(), cfg.getSettings()); + } + displaySettings(); return true; } diff --git a/plugins/feature/ambe/ambegui.h b/plugins/feature/ambe/ambegui.h index 59acd6323..85a8a880a 100644 --- a/plugins/feature/ambe/ambegui.h +++ b/plugins/feature/ambe/ambegui.h @@ -58,6 +58,7 @@ private: PluginAPI* m_pluginAPI; FeatureUISet* m_featureUISet; AMBESettings m_settings; + QList m_settingsKeys; RollupState m_rollupState; bool m_doApplySettings; MessageQueue m_inputMessageQueue; diff --git a/plugins/feature/ambe/ambesettings.cpp b/plugins/feature/ambe/ambesettings.cpp index 13610c10e..88e59e83d 100644 --- a/plugins/feature/ambe/ambesettings.cpp +++ b/plugins/feature/ambe/ambesettings.cpp @@ -112,3 +112,63 @@ bool AMBESettings::deserialize(const QByteArray& data) return false; } } + +void AMBESettings::applySettings(const QStringList& settingsKeys, const AMBESettings& settings) +{ + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIFeatureSetIndex")) { + m_reverseAPIFeatureSetIndex = settings.m_reverseAPIFeatureSetIndex; + } + if (settingsKeys.contains("reverseAPIFeatureIndex")) { + m_reverseAPIFeatureIndex = settings.m_reverseAPIFeatureIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } +} + +QString AMBESettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIFeatureSetIndex") || force) { + ostr << " m_reverseAPIFeatureSetIndex: " << m_reverseAPIFeatureSetIndex; + } + if (settingsKeys.contains("reverseAPIFeatureIndex") || force) { + ostr << " m_reverseAPIFeatureIndex: " << m_reverseAPIFeatureIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/feature/ambe/ambesettings.h b/plugins/feature/ambe/ambesettings.h index 5201a2c8f..8225a70da 100644 --- a/plugins/feature/ambe/ambesettings.h +++ b/plugins/feature/ambe/ambesettings.h @@ -41,6 +41,8 @@ struct AMBESettings QByteArray serialize() const; bool deserialize(const QByteArray& data); void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } + void applySettings(const QStringList& settingsKeys, const AMBESettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif // INCLUDE_FEATURE_AMBESETTINGS_H_