Ensure old dev events don't mess actual status

This commit is contained in:
Martchus 2016-08-29 22:21:10 +02:00
parent b3760eb494
commit 9b49c68013
2 changed files with 10 additions and 3 deletions

View File

@ -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

View File

@ -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;
};
/*!