NetworkDeviceMonitor: Fix initial reachable state using internal caches

This commit is contained in:
Simon Stürz 2023-02-01 23:43:59 +01:00
parent 5ea0fbe156
commit 1ac8802035
3 changed files with 12 additions and 5 deletions

View File

@ -241,6 +241,7 @@ NetworkDeviceMonitor *NetworkDeviceDiscoveryImpl::registerMonitor(const MacAddre
NetworkDeviceMonitorImpl *monitor = new NetworkDeviceMonitorImpl(macAddress, this); NetworkDeviceMonitorImpl *monitor = new NetworkDeviceMonitorImpl(macAddress, this);
monitor->setNetworkDeviceInfo(info); monitor->setNetworkDeviceInfo(info);
monitor->setLastSeen(m_lastSeen.value(macAddress, QDateTime()));
m_monitors.insert(macAddress, monitor); m_monitors.insert(macAddress, monitor);
m_monitorsReferenceCount[macAddress] = 1; 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..."; qCDebug(dcNetworkDeviceDiscovery()) << "Adding network device monitor for unresolved mac address. Starting a discovery...";
NetworkDeviceDiscoveryReply *reply = discover(); NetworkDeviceDiscoveryReply *reply = discover();
connect(reply, &NetworkDeviceDiscoveryReply::finished, reply, &NetworkDeviceDiscoveryReply::deleteLater); connect(reply, &NetworkDeviceDiscoveryReply::finished, reply, &NetworkDeviceDiscoveryReply::deleteLater);
} else {
evaluateMonitor(monitor);
} }
evaluateMonitor(monitor); qCDebug(dcNetworkDeviceDiscovery()) << "Registered successfully" << monitor;
return monitor; return monitor;
} }
@ -580,7 +582,7 @@ void NetworkDeviceDiscoveryImpl::updateCache(const NetworkDeviceInfo &deviceInfo
void NetworkDeviceDiscoveryImpl::evaluateMonitor(NetworkDeviceMonitorImpl *monitor) void NetworkDeviceDiscoveryImpl::evaluateMonitor(NetworkDeviceMonitorImpl *monitor)
{ {
if (monitor->networkDeviceInfo().address().isNull()) if (!monitor->networkDeviceInfo().isValid())
return; return;
if (monitor->currentPingReply()) if (monitor->currentPingReply())
@ -600,6 +602,12 @@ void NetworkDeviceDiscoveryImpl::evaluateMonitor(NetworkDeviceMonitorImpl *monit
requiresRefresh = true; 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) if (!requiresRefresh)
return; return;

View File

@ -94,7 +94,6 @@ void NetworkDeviceMonitorImpl::setLastSeen(const QDateTime &lastSeen)
return; return;
m_lastSeen = lastSeen; m_lastSeen = lastSeen;
emit lastSeenChanged(m_lastSeen); emit lastSeenChanged(m_lastSeen);
} }

View File

@ -46,7 +46,7 @@ QDebug operator<<(QDebug dbg, NetworkDeviceMonitor *networkDeviceMonitor)
dbg.nospace() << " - " << networkDeviceMonitor->networkDeviceInfo().macAddressManufacturer(); dbg.nospace() << " - " << networkDeviceMonitor->networkDeviceInfo().macAddressManufacturer();
dbg.nospace() << ", " << networkDeviceMonitor->networkDeviceInfo().address().toString(); dbg.nospace() << ", " << networkDeviceMonitor->networkDeviceInfo().address().toString();
dbg.nospace() << ", " << (networkDeviceMonitor->reachable() ? "reachable" : "not reachable");
dbg.nospace() << ")"; dbg.nospace() << ")";
return dbg; return dbg;
} }