diff --git a/libnymea-core/hardware/network/networkdevicediscoveryimpl.cpp b/libnymea-core/hardware/network/networkdevicediscoveryimpl.cpp index e5a7e3ba..4371d39b 100644 --- a/libnymea-core/hardware/network/networkdevicediscoveryimpl.cpp +++ b/libnymea-core/hardware/network/networkdevicediscoveryimpl.cpp @@ -241,6 +241,7 @@ NetworkDeviceMonitor *NetworkDeviceDiscoveryImpl::registerMonitor(const MacAddre NetworkDeviceMonitorImpl *monitor = new NetworkDeviceMonitorImpl(macAddress, this); monitor->setNetworkDeviceInfo(info); + monitor->setLastSeen(m_lastSeen.value(macAddress, QDateTime())); m_monitors.insert(macAddress, monitor); m_monitorsReferenceCount[macAddress] = 1; @@ -256,10 +257,11 @@ NetworkDeviceMonitor *NetworkDeviceDiscoveryImpl::registerMonitor(const MacAddre qCDebug(dcNetworkDeviceDiscovery()) << "Adding network device monitor for unresolved mac address. Starting a discovery..."; NetworkDeviceDiscoveryReply *reply = discover(); connect(reply, &NetworkDeviceDiscoveryReply::finished, reply, &NetworkDeviceDiscoveryReply::deleteLater); + } else { + evaluateMonitor(monitor); } - evaluateMonitor(monitor); - + qCDebug(dcNetworkDeviceDiscovery()) << "Registered successfully" << monitor; return monitor; } @@ -580,7 +582,7 @@ void NetworkDeviceDiscoveryImpl::updateCache(const NetworkDeviceInfo &deviceInfo void NetworkDeviceDiscoveryImpl::evaluateMonitor(NetworkDeviceMonitorImpl *monitor) { - if (monitor->networkDeviceInfo().address().isNull()) + if (!monitor->networkDeviceInfo().isValid()) return; if (monitor->currentPingReply()) @@ -600,6 +602,12 @@ void NetworkDeviceDiscoveryImpl::evaluateMonitor(NetworkDeviceMonitorImpl *monit requiresRefresh = true; } + if (!requiresRefresh && currentDateTime <= monitor->lastSeen().addSecs(m_monitorInterval)) { + // We have seen this device within the last minute, make sure the monitor is reachable + monitor->setReachable(true); + return; + } + if (!requiresRefresh) return; diff --git a/libnymea-core/hardware/network/networkdevicemonitorimpl.cpp b/libnymea-core/hardware/network/networkdevicemonitorimpl.cpp index c0191ff2..2bc0b19a 100644 --- a/libnymea-core/hardware/network/networkdevicemonitorimpl.cpp +++ b/libnymea-core/hardware/network/networkdevicemonitorimpl.cpp @@ -94,7 +94,6 @@ void NetworkDeviceMonitorImpl::setLastSeen(const QDateTime &lastSeen) return; m_lastSeen = lastSeen; - emit lastSeenChanged(m_lastSeen); } diff --git a/libnymea/network/networkdevicemonitor.cpp b/libnymea/network/networkdevicemonitor.cpp index 41090e94..775922b6 100644 --- a/libnymea/network/networkdevicemonitor.cpp +++ b/libnymea/network/networkdevicemonitor.cpp @@ -46,7 +46,7 @@ QDebug operator<<(QDebug dbg, NetworkDeviceMonitor *networkDeviceMonitor) dbg.nospace() << " - " << networkDeviceMonitor->networkDeviceInfo().macAddressManufacturer(); dbg.nospace() << ", " << networkDeviceMonitor->networkDeviceInfo().address().toString(); - + dbg.nospace() << ", " << (networkDeviceMonitor->reachable() ? "reachable" : "not reachable"); dbg.nospace() << ")"; return dbg; }