mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-08-03 06:22:25 -04:00
Merge pull request #2379 from srcejon/fix_2378
Radiosonde: Rate limit position updates to SondeHub.
This commit is contained in:
commit
e38e2e773f
@ -190,6 +190,8 @@ RadiosondeGUI::RadiosondeGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, F
|
|||||||
|
|
||||||
// Get updated when position changes
|
// Get updated when position changes
|
||||||
connect(&MainCore::instance()->getSettings(), &MainSettings::preferenceChanged, this, &RadiosondeGUI::preferenceChanged);
|
connect(&MainCore::instance()->getSettings(), &MainSettings::preferenceChanged, this, &RadiosondeGUI::preferenceChanged);
|
||||||
|
connect(&m_positionUpdateTimer, &QTimer::timeout, this, &RadiosondeGUI::updatePosition);
|
||||||
|
m_positionUpdateTimer.setSingleShot(true);
|
||||||
|
|
||||||
ui->radiosondes->setItemDelegateForColumn(RADIOSONDE_COL_LATITUDE, new DecimalDelegate(5, ui->radiosondes));
|
ui->radiosondes->setItemDelegateForColumn(RADIOSONDE_COL_LATITUDE, new DecimalDelegate(5, ui->radiosondes));
|
||||||
ui->radiosondes->setItemDelegateForColumn(RADIOSONDE_COL_LONGITUDE, new DecimalDelegate(5, ui->radiosondes));
|
ui->radiosondes->setItemDelegateForColumn(RADIOSONDE_COL_LONGITUDE, new DecimalDelegate(5, ui->radiosondes));
|
||||||
@ -979,22 +981,41 @@ QStringList RadiosondeGUI::getRadios()
|
|||||||
|
|
||||||
void RadiosondeGUI::updatePosition()
|
void RadiosondeGUI::updatePosition()
|
||||||
{
|
{
|
||||||
|
// Limit number of position updates sent to SondeHub
|
||||||
|
const int updateTime = m_settings.m_mobile ? m_minMobilePositionUpdateTime : m_minFixedPositionUpdateTime;
|
||||||
|
|
||||||
if (m_sondeHub && m_settings.m_displayPosition)
|
if (m_sondeHub && m_settings.m_displayPosition)
|
||||||
{
|
{
|
||||||
float stationLatitude = MainCore::instance()->getSettings().getLatitude();
|
if (!m_lastPositionUpdate.isValid() || (m_lastPositionUpdate.secsTo(QDateTime::currentDateTime()) >= updateTime))
|
||||||
float stationLongitude = MainCore::instance()->getSettings().getLongitude();
|
{
|
||||||
float stationAltitude = MainCore::instance()->getSettings().getAltitude();
|
float stationLatitude = MainCore::instance()->getSettings().getLatitude();
|
||||||
|
float stationLongitude = MainCore::instance()->getSettings().getLongitude();
|
||||||
|
float stationAltitude = MainCore::instance()->getSettings().getAltitude();
|
||||||
|
|
||||||
m_sondeHub->updatePosition(
|
m_sondeHub->updatePosition(
|
||||||
m_settings.m_callsign,
|
m_settings.m_callsign,
|
||||||
stationLatitude,
|
stationLatitude,
|
||||||
stationLongitude,
|
stationLongitude,
|
||||||
stationAltitude,
|
stationAltitude,
|
||||||
getRadios().join(" "),
|
getRadios().join(" "),
|
||||||
m_settings.m_antenna,
|
m_settings.m_antenna,
|
||||||
m_settings.m_email,
|
m_settings.m_email,
|
||||||
m_settings.m_mobile
|
m_settings.m_mobile
|
||||||
);
|
);
|
||||||
|
|
||||||
|
m_positionUpdateTimer.stop();
|
||||||
|
m_lastPositionUpdate = QDateTime::currentDateTime();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qint64 msecs = (updateTime * 1000) - m_lastPositionUpdate.msecsTo(QDateTime::currentDateTime());
|
||||||
|
|
||||||
|
if (msecs < 0) {
|
||||||
|
msecs = 0;
|
||||||
|
}
|
||||||
|
m_positionUpdateTimer.setInterval(msecs);
|
||||||
|
m_positionUpdateTimer.start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,6 +103,10 @@ private:
|
|||||||
QMenu *radiosondesMenu; // Column select context menu
|
QMenu *radiosondesMenu; // Column select context menu
|
||||||
|
|
||||||
SondeHub *m_sondeHub;
|
SondeHub *m_sondeHub;
|
||||||
|
QDateTime m_lastPositionUpdate;
|
||||||
|
QTimer m_positionUpdateTimer;
|
||||||
|
static const int m_minMobilePositionUpdateTime = 30; // In seconds
|
||||||
|
static const int m_minFixedPositionUpdateTime = 5 * 60;
|
||||||
|
|
||||||
explicit RadiosondeGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, Feature *feature, QWidget* parent = nullptr);
|
explicit RadiosondeGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, Feature *feature, QWidget* parent = nullptr);
|
||||||
virtual ~RadiosondeGUI();
|
virtual ~RadiosondeGUI();
|
||||||
|
@ -126,6 +126,7 @@ void SondeHub::upload(
|
|||||||
obj.insert("subtype", subframe->getType());
|
obj.insert("subtype", subframe->getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//obj.insert("dev", true);
|
||||||
//qDebug() << obj;
|
//qDebug() << obj;
|
||||||
QJsonArray payloads {
|
QJsonArray payloads {
|
||||||
obj
|
obj
|
||||||
@ -189,7 +190,43 @@ void SondeHub::handleReply(QNetworkReply* reply)
|
|||||||
if (!reply->error())
|
if (!reply->error())
|
||||||
{
|
{
|
||||||
QByteArray bytes = reply->readAll();
|
QByteArray bytes = reply->readAll();
|
||||||
//qDebug() << bytes;
|
QJsonDocument document = QJsonDocument::fromJson(bytes);
|
||||||
|
if (document.isObject())
|
||||||
|
{
|
||||||
|
QJsonObject obj = document.object();
|
||||||
|
if (obj.contains(QStringLiteral("message")))
|
||||||
|
{
|
||||||
|
QString message = obj.value(QStringLiteral("message")).toString();
|
||||||
|
qWarning() << "SondeHub message:" << message;
|
||||||
|
}
|
||||||
|
if (obj.contains(QStringLiteral("errors")))
|
||||||
|
{
|
||||||
|
QJsonArray errors = obj.value(QStringLiteral("errors")).toArray();
|
||||||
|
for (auto errorObjRef : errors)
|
||||||
|
{
|
||||||
|
QJsonObject errorObj = errorObjRef.toObject();
|
||||||
|
if (errorObj.contains(QStringLiteral("error_message")))
|
||||||
|
{
|
||||||
|
QString errorMessage = errorObj.value(QStringLiteral("error_message")).toString();
|
||||||
|
qWarning() << "SondeHub error:" << errorMessage;
|
||||||
|
if (errorObj.contains(QStringLiteral("payload")))
|
||||||
|
{
|
||||||
|
QJsonObject payload = errorObj.value(QStringLiteral("payload")).toObject();
|
||||||
|
qWarning() << "SondeHub error:" << QJsonDocument(payload);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qWarning() << "SondeHub error:" << QJsonDocument(errorObj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//qDebug() << "SondeHub::handleReply: obj" << QJsonDocument(obj);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug() << "SondeHub::handleReply:" << bytes;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user