mirror of
https://github.com/f4exb/sdrangel.git
synced 2026-07-26 20:14:19 -04:00
Web API: /sdrangel/preset (PUT) implementation
This commit is contained in:
@@ -63,6 +63,7 @@
|
||||
#include <QDebug>
|
||||
|
||||
MESSAGE_CLASS_DEFINITION(MainWindow::MsgLoadPreset, Message)
|
||||
MESSAGE_CLASS_DEFINITION(MainWindow::MsgSavePreset, Message)
|
||||
|
||||
MainWindow *MainWindow::m_instance = 0;
|
||||
|
||||
@@ -664,6 +665,15 @@ bool MainWindow::handleMessage(const Message& cmd)
|
||||
loadPresetSettings(notif.getPreset(), notif.getDeviceSetIndex());
|
||||
return true;
|
||||
}
|
||||
else if (MsgSavePreset::match(cmd))
|
||||
{
|
||||
MsgSavePreset& notif = (MsgSavePreset&) cmd;
|
||||
savePresetSettings(notif.getPreset(), notif.getDeviceSetIndex());
|
||||
if (notif.isNewPreset()) { ui->presetTree->setCurrentItem(addPresetToTree(notif.getPreset())); }
|
||||
m_settings.sortPresets();
|
||||
m_settings.save();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -107,6 +107,32 @@ private:
|
||||
{ }
|
||||
};
|
||||
|
||||
class MsgSavePreset : public Message {
|
||||
MESSAGE_CLASS_DECLARATION
|
||||
|
||||
public:
|
||||
Preset *getPreset() const { return m_preset; }
|
||||
int getDeviceSetIndex() const { return m_deviceSetIndex; }
|
||||
bool isNewPreset() const { return m_newPreset; }
|
||||
|
||||
static MsgSavePreset* create(Preset *preset, int deviceSetIndex, bool newPreset)
|
||||
{
|
||||
return new MsgSavePreset(preset, deviceSetIndex, newPreset);
|
||||
}
|
||||
|
||||
private:
|
||||
Preset *m_preset;
|
||||
int m_deviceSetIndex;
|
||||
bool m_newPreset;
|
||||
|
||||
MsgSavePreset(Preset *preset, int deviceSetIndex, bool newPreset) :
|
||||
Message(),
|
||||
m_preset(preset),
|
||||
m_deviceSetIndex(deviceSetIndex),
|
||||
m_newPreset(newPreset)
|
||||
{ }
|
||||
};
|
||||
|
||||
enum {
|
||||
PGroup,
|
||||
PItem
|
||||
|
||||
@@ -486,6 +486,61 @@ int WebAPIAdapterGUI::instancePresetPatch(
|
||||
return 200;
|
||||
}
|
||||
|
||||
int WebAPIAdapterGUI::instancePresetPut(
|
||||
Swagger::SWGPresetTransfer& query,
|
||||
Swagger::SWGPresetIdentifier& response,
|
||||
Swagger::SWGErrorResponse& error)
|
||||
{
|
||||
int deviceSetIndex = query.getDeviceSetIndex();
|
||||
Swagger::SWGPresetIdentifier *presetIdentifier = query.getPreset();
|
||||
int nbDeviceSets = m_mainWindow.m_deviceUIs.size();
|
||||
bool newPreset;
|
||||
|
||||
if (deviceSetIndex > nbDeviceSets)
|
||||
{
|
||||
*error.getMessage() = QString("There is no device set at index %1. Number of device sets is %2").arg(deviceSetIndex).arg(nbDeviceSets);
|
||||
return 404;
|
||||
}
|
||||
|
||||
const Preset *selectedPreset = m_mainWindow.m_settings.getPreset(*presetIdentifier->getGroupName(),
|
||||
presetIdentifier->getCenterFrequency(),
|
||||
*presetIdentifier->getName());
|
||||
|
||||
if (selectedPreset == 0) // save on a new preset
|
||||
{
|
||||
selectedPreset = m_mainWindow.m_settings.newPreset(*presetIdentifier->getGroupName(), *presetIdentifier->getName());
|
||||
newPreset = true;
|
||||
}
|
||||
else // update existing preset
|
||||
{
|
||||
DeviceUISet *deviceUI = m_mainWindow.m_deviceUIs[deviceSetIndex];
|
||||
newPreset = false;
|
||||
|
||||
if (deviceUI->m_deviceSourceEngine && !selectedPreset->isSourcePreset())
|
||||
{
|
||||
*error.getMessage() = QString("Preset type (T) and device set type (Rx) mismatch");
|
||||
return 404;
|
||||
}
|
||||
|
||||
if (deviceUI->m_deviceSinkEngine && selectedPreset->isSourcePreset())
|
||||
{
|
||||
*error.getMessage() = QString("Preset type (R) and device set type (Tx) mismatch");
|
||||
return 404;
|
||||
}
|
||||
}
|
||||
|
||||
MainWindow::MsgSavePreset *msg = MainWindow::MsgSavePreset::create(const_cast<Preset*>(selectedPreset), deviceSetIndex, newPreset);
|
||||
m_mainWindow.m_inputMessageQueue.push(msg);
|
||||
|
||||
response.init();
|
||||
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
||||
*response.getGroupName() = selectedPreset->getGroup();
|
||||
*response.getType() = selectedPreset->isSourcePreset() ? "R" : "T";
|
||||
*response.getName() = selectedPreset->getDescription();
|
||||
|
||||
return 200;
|
||||
}
|
||||
|
||||
QtMsgType WebAPIAdapterGUI::getMsgTypeFromString(const QString& msgTypeString)
|
||||
{
|
||||
if (msgTypeString == "debug") {
|
||||
|
||||
@@ -83,6 +83,11 @@ public:
|
||||
Swagger::SWGPresetIdentifier& response,
|
||||
Swagger::SWGErrorResponse& error);
|
||||
|
||||
virtual int instancePresetPut(
|
||||
Swagger::SWGPresetTransfer& query,
|
||||
Swagger::SWGPresetIdentifier& response,
|
||||
Swagger::SWGErrorResponse& error);
|
||||
|
||||
private:
|
||||
MainWindow& m_mainWindow;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user