From ae319f604b5d88123dc3e0ffe5dc26da9d249c93 Mon Sep 17 00:00:00 2001 From: Martchus Date: Fri, 1 Sep 2023 23:21:01 +0200 Subject: [PATCH] Fix reading device events * Fix logic error that prevented the `devStatusChanged()` event from being emitted when a device has connected * Fix reading device ID from event data --- .../syncthingconnection_requests.cpp | 16 +++++++++++----- syncthingconnector/syncthingdev.h | 12 +++++++++--- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/syncthingconnector/syncthingconnection_requests.cpp b/syncthingconnector/syncthingconnection_requests.cpp index bd850a3..a264124 100644 --- a/syncthingconnector/syncthingconnection_requests.cpp +++ b/syncthingconnector/syncthingconnection_requests.cpp @@ -1976,20 +1976,26 @@ void SyncthingConnection::readDeviceEvent(SyncthingEventId eventId, DateTime eve if (eventId < m_lastConnectionsUpdateEvent) { return; } - const QString dev(eventData.value(QLatin1String("device")).toString()); - if (dev.isEmpty()) { + const auto devId = [&eventData] { + const auto dev = eventData.value(QLatin1String("device")).toString(); + if (!dev.isEmpty()) { + return dev; + } + return eventData.value(QLatin1String("id")).toString(); + }(); + if (devId.isEmpty()) { return; } // handle "DeviceRejected"-event if (eventType == QLatin1String("DeviceRejected")) { - readDevRejected(eventTime, dev, eventData); + readDevRejected(eventTime, devId, eventData); return; } // find relevant device info int index; - auto *const devInfo(findDevInfo(dev, index)); + auto *const devInfo = findDevInfo(devId, index); if (!devInfo) { return; } @@ -1998,7 +2004,7 @@ void SyncthingConnection::readDeviceEvent(SyncthingEventId eventId, DateTime eve SyncthingDevStatus status = devInfo->status; bool paused = devInfo->paused; if (eventType == QLatin1String("DeviceConnected")) { - devInfo->setConnectedStateAccordingToCompletion(); + status = devInfo->computeConnectedStateAccordingToCompletion(); } else if (eventType == QLatin1String("DeviceDisconnected")) { status = SyncthingDevStatus::Disconnected; } else if (eventType == QLatin1String("DevicePaused")) { diff --git a/syncthingconnector/syncthingdev.h b/syncthingconnector/syncthingdev.h index c2346f5..56f5a96 100644 --- a/syncthingconnector/syncthingdev.h +++ b/syncthingconnector/syncthingdev.h @@ -35,7 +35,8 @@ struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDev { explicit SyncthingDev(const QString &id = QString(), const QString &name = QString()); QString statusString() const; bool isConnected() const; - void setConnectedStateAccordingToCompletion(); + SyncthingDevStatus computeConnectedStateAccordingToCompletion() const; + SyncthingDevStatus setConnectedStateAccordingToCompletion(); const QString displayName() const; QString id; @@ -76,9 +77,14 @@ inline bool SyncthingDev::isConnected() const } } -inline void SyncthingDev::setConnectedStateAccordingToCompletion() +inline SyncthingDevStatus SyncthingDev::computeConnectedStateAccordingToCompletion() const { - status = overallCompletion.needed.isNull() ? SyncthingDevStatus::Idle : SyncthingDevStatus::Synchronizing; + return overallCompletion.needed.isNull() ? SyncthingDevStatus::Idle : SyncthingDevStatus::Synchronizing; +} + +inline SyncthingDevStatus SyncthingDev::setConnectedStateAccordingToCompletion() +{ + return status = computeConnectedStateAccordingToCompletion(); } inline const QString SyncthingDev::displayName() const