1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-02 06:04:39 -04:00

REST API: config: GET (4): optimize channel settings API management and generally improve constedness

This commit is contained in:
f4exb
2019-08-01 21:27:31 +02:00
parent 810bbe2979
commit ef82b89182
53 changed files with 220 additions and 185 deletions
+30 -4
View File
@@ -25,7 +25,9 @@ WebAPIAdapterBase::WebAPIAdapterBase()
{}
WebAPIAdapterBase::~WebAPIAdapterBase()
{}
{
m_webAPIChannelAdapters.flush();
}
void WebAPIAdapterBase::webapiFormatPreferences(
SWGSDRangel::SWGPreferences *apiPreferences,
@@ -69,11 +71,10 @@ void WebAPIAdapterBase::webapiFormatPreset(
const QByteArray& channelSettings = channelConfig.m_config;
SWGSDRangel::SWGChannelSettings *swgChannelSettings = swgChannelConfigs->back()->getConfig();
swgChannelSettings->init();
const PluginInterface *pluginInterface = m_pluginManager->getChannelPluginInterface(channelConfig.m_channelIdURI);
ChannelAPI *channelWebAPIAdapter = m_webAPIChannelAdapters.getChannelAPI(channelConfig.m_channelIdURI, m_pluginManager);
if (pluginInterface) // TODO: optimize by caching web API adapters
if (channelWebAPIAdapter)
{
ChannelAPI *channelWebAPIAdapter = pluginInterface->createChannelWebAPIAdapter();
channelWebAPIAdapter->deserialize(channelSettings);
QString errorMessage;
channelWebAPIAdapter->webapiSettingsGet(*swgChannelSettings, errorMessage);
@@ -109,4 +110,29 @@ void WebAPIAdapterBase::webapiFormatCommand(
apiCommand->setKeyModifiers((int) command.getKeyModifiers());
apiCommand->setAssociateKey(command.getAssociateKey() ? 1 : 0);
apiCommand->setRelease(command.getRelease() ? 1 : 0);
}
ChannelAPI *WebAPIAdapterBase::WebAPIChannelAdapters::getChannelAPI(const QString& channelURI, const PluginManager *pluginManager)
{
QMap<QString, ChannelAPI*>::iterator it = m_webAPIChannelAdapters.find(channelURI);
if (it == m_webAPIChannelAdapters.end())
{
ChannelAPI *channelAPI = pluginManager->getChannelPluginInterface(channelURI)->createChannelWebAPIAdapter();
m_webAPIChannelAdapters.insert(channelURI, channelAPI);
return channelAPI;
}
else
{
return *it;
}
}
void WebAPIAdapterBase::WebAPIChannelAdapters::flush()
{
foreach(ChannelAPI *ChannelAPI, m_webAPIChannelAdapters) {
delete ChannelAPI;
}
m_webAPIChannelAdapters.clear();
}