NetworkDeviceMonitor: Fix initial reachable state using internal caches
This commit is contained in:
parent
5ea0fbe156
commit
1ac8802035
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user