1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-12-23 01:55:48 -05:00

REST API: config: PUT (2): interface

This commit is contained in:
f4exb 2019-08-06 08:48:14 +02:00
parent f80d16451b
commit 659f94b4c6
9 changed files with 202 additions and 70 deletions

View File

@ -139,6 +139,13 @@ void MainSettings::save() const
s.setValue("hwDeviceUserArgs", qCompress(m_hardwareDeviceUserArgs.serialize()).toBase64());
}
void MainSettings::initialize()
{
resetToDefaults();
clearCommands();
clearPresets();
}
void MainSettings::resetToDefaults()
{
m_preferences.resetToDefaults();
@ -150,10 +157,15 @@ Preset* MainSettings::newPreset(const QString& group, const QString& description
Preset* preset = new Preset();
preset->setGroup(group);
preset->setDescription(description);
m_presets.append(preset);
addPreset(preset);
return preset;
}
void MainSettings::addPreset(Preset *preset)
{
m_presets.append(preset);
}
void MainSettings::deletePreset(const Preset* preset)
{
m_presets.removeAll((Preset*)preset);
@ -214,6 +226,15 @@ const Preset* MainSettings::getPreset(const QString& groupName, quint64 centerFr
return 0;
}
void MainSettings::clearPresets()
{
foreach (Preset *preset, m_presets) {
delete preset;
}
m_presets.clear();
}
void MainSettings::addCommand(Command *command)
{
m_commands.append(command);
@ -273,3 +294,12 @@ const Command* MainSettings::getCommand(const QString& groupName, const QString&
return 0;
}
void MainSettings::clearCommands()
{
foreach (Command *command, m_commands) {
delete command;
}
m_commands.clear();
}

View File

@ -20,12 +20,15 @@ public:
void save() const;
void resetToDefaults();
void initialize();
QString getFileLocation() const;
int getFileFormat() const; //!< see QSettings::Format for the values
const Preferences& getPreferences() const { return m_preferences; }
void setPreferences(const Preferences& preferences) { m_preferences = preferences; }
Preset* newPreset(const QString& group, const QString& description);
void addPreset(Preset *preset);
void deletePreset(const Preset* preset);
int getPresetCount() const { return m_presets.count(); }
const Preset* getPreset(int index) const { return m_presets[index]; }
@ -33,6 +36,7 @@ public:
void sortPresets();
void renamePresetGroup(const QString& oldGroupName, const QString& newGroupName);
void deletePresetGroup(const QString& groupName);
void clearPresets();
void addCommand(Command *command);
void deleteCommand(const Command* command);
@ -42,6 +46,7 @@ public:
void sortCommands();
void renameCommandGroup(const QString& oldGroupName, const QString& newGroupName);
void deleteCommandGroup(const QString& groupName);
void clearCommands();
const Preset& getWorkingPresetConst() const { return m_workingPreset; }
Preset* getWorkingPreset() { return &m_workingPreset; }

View File

@ -51,6 +51,38 @@ void WebAPIAdapterBase::webapiFormatPreferences(
apiPreferences->setFileMinLogLevel((int) preferences.getFileMinLogLevel());
}
void WebAPIAdapterBase::webapiInitConfig(
MainSettings& mainSettings
)
{
mainSettings.initialize();
}
void WebAPIAdapterBase::webapiUpdatePreferences(
SWGSDRangel::SWGPreferences *apiPreferences,
Preferences& preferences
)
{
if (apiPreferences->getSourceDevice()) {
preferences.setSourceDevice(*apiPreferences->getSourceDevice());
}
preferences.setSourceIndex(apiPreferences->getSourceIndex());
if (apiPreferences->getAudioType()) {
preferences.setAudioType(*apiPreferences->getAudioType());
}
if (apiPreferences->getAudioDevice()) {
preferences.setAudioDevice(*apiPreferences->getAudioDevice());
}
preferences.setLatitude(apiPreferences->getLatitude());
preferences.setLongitude(apiPreferences->getLongitude());
preferences.setConsoleMinLogLevel((QtMsgType) apiPreferences->getConsoleMinLogLevel());
preferences.setUseLogFile(apiPreferences->getUseLogFile() != 0);
if (apiPreferences->getLogFileName()) {
preferences.setLogFileName(*apiPreferences->getLogFileName());
}
preferences.setFileMinLogLevel((QtMsgType) apiPreferences->getFileMinLogLevel());
}
void WebAPIAdapterBase::webapiFormatPreset(
SWGSDRangel::SWGPreset *apiPreset,
const Preset& preset

View File

@ -27,6 +27,7 @@
#include "SWGCommand.h"
#include "settings/preferences.h"
#include "settings/preset.h"
#include "settings/mainsettings.h"
#include "commands/command.h"
class PluginManager;
@ -56,6 +57,13 @@ public:
SWGSDRangel::SWGCommand *apiCommand,
const Command& command
);
static void webapiInitConfig(
MainSettings& mainSettings
);
static void webapiUpdatePreferences(
SWGSDRangel::SWGPreferences *apiPreferences,
Preferences& preferences
);
private:
class WebAPIChannelAdapters

View File

@ -33,6 +33,7 @@ namespace SWGSDRangel
class SWGInstanceConfigResponse;
class SWGInstanceDevicesResponse;
class SWGInstanceChannelsResponse;
class SWGPreferences;
class SWGLoggingInfo;
class SWGAudioDevices;
class SWGAudioInputDevice;
@ -104,6 +105,27 @@ public:
return 501;
}
/**
* Handler of /sdrangel/config (PUT) swagger/sdrangel/code/html2/index.html#api-Default-instanceSummary
* returns the Http status code (default 501: not implemented)
*/
virtual void instanceConfigInit()
{
}
virtual int instanceConfigPutPreferences(
SWGSDRangel::SWGPreferences& preferences,
const QStringList& preferenceKeys,
SWGSDRangel::SWGErrorResponse& error
)
{
(void) preferences;
(void) preferenceKeys;
error.init();
*error.getMessage() = QString("Function not implemented");
return 501;
}
/**
* Handler of /sdrangel/devices (GET) swagger/sdrangel/code/html2/index.html#api-Default-instanceDevices
* returns the Http status code (default 501: not implemented)

View File

@ -217,6 +217,8 @@ void WebAPIRequestMapper::instanceSummaryService(qtwebapp::HttpRequest& request,
void WebAPIRequestMapper::instanceConfigService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
{
SWGSDRangel::SWGInstanceConfigResponse query;
SWGSDRangel::SWGSuccessResponse normalResponse;
SWGSDRangel::SWGErrorResponse errorResponse;
response.setHeader("Content-Type", "application/json");
response.setHeader("Access-Control-Allow-Origin", "*");
@ -233,6 +235,30 @@ void WebAPIRequestMapper::instanceConfigService(qtwebapp::HttpRequest& request,
response.write(errorResponse.asJson().toUtf8());
}
}
else if (request.getMethod() == "PUT")
{
QString jsonStr = request.getBody();
QJsonObject jsonObject;
if (parseJsonBody(jsonStr, jsonObject, response))
{
m_adapter->instanceConfigInit();
}
else
{
response.setStatus(400,"Invalid JSON format");
errorResponse.init();
*errorResponse.getMessage() = "Invalid JSON format";
response.write(errorResponse.asJson().toUtf8());
}
}
else
{
response.setStatus(405,"Invalid HTTP method");
errorResponse.init();
*errorResponse.getMessage() = "Invalid HTTP method";
response.write(errorResponse.asJson().toUtf8());
}
}
void WebAPIRequestMapper::instanceDevicesService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response)
@ -2809,96 +2835,96 @@ void WebAPIRequestMapper::appendSettingsArrayKeys(
void WebAPIRequestMapper::resetDeviceSettings(SWGSDRangel::SWGDeviceSettings& deviceSettings)
{
deviceSettings.cleanup();
deviceSettings.setDeviceHwType(0);
deviceSettings.setAirspySettings(0);
deviceSettings.setAirspyHfSettings(0);
deviceSettings.setBladeRf1InputSettings(0);
deviceSettings.setBladeRf1OutputSettings(0);
deviceSettings.setFcdProPlusSettings(0);
deviceSettings.setFcdProSettings(0);
deviceSettings.setFileInputSettings(0);
deviceSettings.setHackRfInputSettings(0);
deviceSettings.setHackRfOutputSettings(0);
deviceSettings.setLimeSdrInputSettings(0);
deviceSettings.setLimeSdrOutputSettings(0);
deviceSettings.setPerseusSettings(0);
deviceSettings.setPlutoSdrInputSettings(0);
deviceSettings.setPlutoSdrOutputSettings(0);
deviceSettings.setRtlSdrSettings(0);
deviceSettings.setRemoteOutputSettings(0);
deviceSettings.setRemoteInputSettings(0);
deviceSettings.setSdrPlaySettings(0);
deviceSettings.setTestSourceSettings(0);
deviceSettings.setDeviceHwType(nullptr);
deviceSettings.setAirspySettings(nullptr);
deviceSettings.setAirspyHfSettings(nullptr);
deviceSettings.setBladeRf1InputSettings(nullptr);
deviceSettings.setBladeRf1OutputSettings(nullptr);
deviceSettings.setFcdProPlusSettings(nullptr);
deviceSettings.setFcdProSettings(nullptr);
deviceSettings.setFileInputSettings(nullptr);
deviceSettings.setHackRfInputSettings(nullptr);
deviceSettings.setHackRfOutputSettings(nullptr);
deviceSettings.setLimeSdrInputSettings(nullptr);
deviceSettings.setLimeSdrOutputSettings(nullptr);
deviceSettings.setPerseusSettings(nullptr);
deviceSettings.setPlutoSdrInputSettings(nullptr);
deviceSettings.setPlutoSdrOutputSettings(nullptr);
deviceSettings.setRtlSdrSettings(nullptr);
deviceSettings.setRemoteOutputSettings(nullptr);
deviceSettings.setRemoteInputSettings(nullptr);
deviceSettings.setSdrPlaySettings(nullptr);
deviceSettings.setTestSourceSettings(nullptr);
}
void WebAPIRequestMapper::resetDeviceReport(SWGSDRangel::SWGDeviceReport& deviceReport)
{
deviceReport.cleanup();
deviceReport.setDeviceHwType(0);
deviceReport.setAirspyHfReport(0);
deviceReport.setAirspyReport(0);
deviceReport.setFileInputReport(0);
deviceReport.setLimeSdrInputReport(0);
deviceReport.setLimeSdrOutputReport(0);
deviceReport.setPerseusReport(0);
deviceReport.setPlutoSdrInputReport(0);
deviceReport.setPlutoSdrOutputReport(0);
deviceReport.setRtlSdrReport(0);
deviceReport.setRemoteOutputReport(0);
deviceReport.setRemoteInputReport(0);
deviceReport.setSdrPlayReport(0);
deviceReport.setDeviceHwType(nullptr);
deviceReport.setAirspyHfReport(nullptr);
deviceReport.setAirspyReport(nullptr);
deviceReport.setFileInputReport(nullptr);
deviceReport.setLimeSdrInputReport(nullptr);
deviceReport.setLimeSdrOutputReport(nullptr);
deviceReport.setPerseusReport(nullptr);
deviceReport.setPlutoSdrInputReport(nullptr);
deviceReport.setPlutoSdrOutputReport(nullptr);
deviceReport.setRtlSdrReport(nullptr);
deviceReport.setRemoteOutputReport(nullptr);
deviceReport.setRemoteInputReport(nullptr);
deviceReport.setSdrPlayReport(nullptr);
}
void WebAPIRequestMapper::resetChannelSettings(SWGSDRangel::SWGChannelSettings& channelSettings)
{
channelSettings.cleanup();
channelSettings.setChannelType(0);
channelSettings.setAmDemodSettings(0);
channelSettings.setAmModSettings(0);
channelSettings.setAtvModSettings(0);
channelSettings.setBfmDemodSettings(0);
channelSettings.setDsdDemodSettings(0);
channelSettings.setNfmDemodSettings(0);
channelSettings.setNfmModSettings(0);
channelSettings.setRemoteSinkSettings(0);
channelSettings.setRemoteSourceSettings(0);
channelSettings.setSsbDemodSettings(0);
channelSettings.setSsbModSettings(0);
channelSettings.setUdpSourceSettings(0);
channelSettings.setUdpSinkSettings(0);
channelSettings.setWfmDemodSettings(0);
channelSettings.setWfmModSettings(0);
channelSettings.setChannelType(nullptr);
channelSettings.setAmDemodSettings(nullptr);
channelSettings.setAmModSettings(nullptr);
channelSettings.setAtvModSettings(nullptr);
channelSettings.setBfmDemodSettings(nullptr);
channelSettings.setDsdDemodSettings(nullptr);
channelSettings.setNfmDemodSettings(nullptr);
channelSettings.setNfmModSettings(nullptr);
channelSettings.setRemoteSinkSettings(nullptr);
channelSettings.setRemoteSourceSettings(nullptr);
channelSettings.setSsbDemodSettings(nullptr);
channelSettings.setSsbModSettings(nullptr);
channelSettings.setUdpSourceSettings(nullptr);
channelSettings.setUdpSinkSettings(nullptr);
channelSettings.setWfmDemodSettings(nullptr);
channelSettings.setWfmModSettings(nullptr);
}
void WebAPIRequestMapper::resetChannelReport(SWGSDRangel::SWGChannelReport& channelReport)
{
channelReport.cleanup();
channelReport.setChannelType(0);
channelReport.setAmDemodReport(0);
channelReport.setAmModReport(0);
channelReport.setAtvModReport(0);
channelReport.setBfmDemodReport(0);
channelReport.setDsdDemodReport(0);
channelReport.setNfmDemodReport(0);
channelReport.setNfmModReport(0);
channelReport.setRemoteSourceReport(0);
channelReport.setSsbDemodReport(0);
channelReport.setSsbModReport(0);
channelReport.setUdpSourceReport(0);
channelReport.setUdpSinkReport(0);
channelReport.setWfmDemodReport(0);
channelReport.setWfmModReport(0);
channelReport.setChannelType(nullptr);
channelReport.setAmDemodReport(nullptr);
channelReport.setAmModReport(nullptr);
channelReport.setAtvModReport(nullptr);
channelReport.setBfmDemodReport(nullptr);
channelReport.setDsdDemodReport(nullptr);
channelReport.setNfmDemodReport(nullptr);
channelReport.setNfmModReport(nullptr);
channelReport.setRemoteSourceReport(nullptr);
channelReport.setSsbDemodReport(nullptr);
channelReport.setSsbModReport(nullptr);
channelReport.setUdpSourceReport(nullptr);
channelReport.setUdpSinkReport(nullptr);
channelReport.setWfmDemodReport(nullptr);
channelReport.setWfmModReport(nullptr);
}
void WebAPIRequestMapper::resetAudioInputDevice(SWGSDRangel::SWGAudioInputDevice& audioInputDevice)
{
audioInputDevice.cleanup();
audioInputDevice.setName(0);
audioInputDevice.setName(nullptr);
}
void WebAPIRequestMapper::resetAudioOutputDevice(SWGSDRangel::SWGAudioOutputDevice& audioOutputDevice)
{
audioOutputDevice.cleanup();
audioOutputDevice.setName(0);
audioOutputDevice.setUdpAddress(0);
audioOutputDevice.setName(nullptr);
audioOutputDevice.setUdpAddress(nullptr);
}

View File

@ -151,6 +151,13 @@ int WebAPIAdapterGUI::instanceConfigGet(
return 200;
}
void WebAPIAdapterGUI::instanceConfigInit()
{
WebAPIAdapterBase webAPIAdapterBase;
webAPIAdapterBase.setPluginManager(m_mainWindow.getPluginManager());
webAPIAdapterBase.webapiInitConfig(m_mainWindow.m_settings);
}
int WebAPIAdapterGUI::instanceDevices(
int direction,
SWGSDRangel::SWGInstanceDevicesResponse& response,

View File

@ -45,6 +45,8 @@ public:
SWGSDRangel::SWGInstanceConfigResponse& response,
SWGSDRangel::SWGErrorResponse& error);
virtual void instanceConfigInit();
virtual int instanceDevices(
int direction,
SWGSDRangel::SWGInstanceDevicesResponse& response,