Ensure old dev events don't mess actual status
This commit is contained in:
parent
b3760eb494
commit
9b49c68013
|
@ -576,6 +576,7 @@ void SyncthingConnection::readConnections()
|
|||
}
|
||||
++index;
|
||||
}
|
||||
m_lastConnectionsUpdate = QDateTime::currentDateTime();
|
||||
} else {
|
||||
emit error(tr("Unable to parse connections: ") + jsonError.errorString());
|
||||
}
|
||||
|
@ -608,6 +609,7 @@ void SyncthingConnection::readEvents()
|
|||
for(const QJsonValue &eventVal : replyArray) {
|
||||
const QJsonObject event = eventVal.toObject();
|
||||
m_lastEventId = event.value(QStringLiteral("id")).toInt(m_lastEventId);
|
||||
const QDateTime eventTime(QDateTime::fromString(event.value(QStringLiteral("time")).toString(), Qt::ISODate));
|
||||
const QString eventType(event.value(QStringLiteral("type")).toString());
|
||||
const QJsonObject eventData(event.value(QStringLiteral("data")).toObject());
|
||||
if(eventType == QLatin1String("Starting")) {
|
||||
|
@ -619,7 +621,7 @@ void SyncthingConnection::readEvents()
|
|||
} else if(eventType.startsWith(QLatin1String("Folder"))) {
|
||||
readDirEvent(eventType, eventData);
|
||||
} else if(eventType.startsWith(QLatin1String("Device"))) {
|
||||
readDeviceEvent(eventType, eventData);
|
||||
readDeviceEvent(eventTime, eventType, eventData);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -749,8 +751,11 @@ void SyncthingConnection::readDirEvent(const QString &eventType, const QJsonObje
|
|||
/*!
|
||||
* \brief Reads results of requestEvents().
|
||||
*/
|
||||
void SyncthingConnection::readDeviceEvent(const QString &eventType, const QJsonObject &eventData)
|
||||
void SyncthingConnection::readDeviceEvent(const QDateTime &eventTime, const QString &eventType, const QJsonObject &eventData)
|
||||
{
|
||||
if(eventTime.isValid() && m_lastConnectionsUpdate.isValid() && eventTime < m_lastConnectionsUpdate) {
|
||||
return; // ignore device events happened before the last connections update
|
||||
}
|
||||
const QString dev(eventData.value(QStringLiteral("device")).toString());
|
||||
if(!dev.isEmpty()) {
|
||||
// dev status changed, depending on event type
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define SYNCTHINGCONNECTION_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QDateTime>
|
||||
|
||||
#include <functional>
|
||||
#include <vector>
|
||||
|
@ -233,7 +234,7 @@ private Q_SLOTS:
|
|||
void readStatusChangedEvent(const QJsonObject &eventData);
|
||||
void readDownloadProgressEvent(const QJsonObject &eventData);
|
||||
void readDirEvent(const QString &eventType, const QJsonObject &eventData);
|
||||
void readDeviceEvent(const QString &eventType, const QJsonObject &eventData);
|
||||
void readDeviceEvent(const QDateTime &eventTime, const QString &eventType, const QJsonObject &eventData);
|
||||
void readRescan();
|
||||
void readPauseResume();
|
||||
|
||||
|
@ -268,6 +269,7 @@ private:
|
|||
bool m_hasStatus;
|
||||
std::vector<SyncthingDir> m_dirs;
|
||||
std::vector<SyncthingDev> m_devs;
|
||||
QDateTime m_lastConnectionsUpdate;
|
||||
};
|
||||
|
||||
/*!
|
||||
|
|
Loading…
Reference in New Issue