lan_discovery_WOL: sort by online status
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
parent
4955807dd0
commit
13406cd359
@ -875,8 +875,6 @@ impl DiscoveryPeer {
|
|||||||
|
|
||||||
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
|
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
|
||||||
pub struct LanPeers {
|
pub struct LanPeers {
|
||||||
// #[serde(default)]
|
|
||||||
// pub peers: String,
|
|
||||||
pub peers: Vec<DiscoveryPeer>,
|
pub peers: Vec<DiscoveryPeer>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
rust-toolchain.toml
Normal file
2
rust-toolchain.toml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[toolchain]
|
||||||
|
channel = "1.62.0"
|
@ -750,31 +750,16 @@ async fn handle_received_peers(mut rx: UnboundedReceiver<config::DiscoveryPeer>)
|
|||||||
loop {
|
loop {
|
||||||
tokio::select! {
|
tokio::select! {
|
||||||
data = rx.recv() => match data {
|
data = rx.recv() => match data {
|
||||||
Some(peer) => {
|
Some(mut peer) => {
|
||||||
let in_response_set = !response_set.insert(peer.id.clone());
|
let in_response_set = !response_set.insert(peer.id.clone());
|
||||||
let mut pre_found = false;
|
if let Some(pos) = peers.iter().position(|x| x.is_same_peer(&peer) ) {
|
||||||
// Try find and update peer
|
let peer1 = peers.remove(pos);
|
||||||
for peer1 in &mut peers {
|
if in_response_set {
|
||||||
if peer1.is_same_peer(&peer) {
|
peer.ip_mac.extend(peer1.ip_mac);
|
||||||
if in_response_set {
|
peer.online = true;
|
||||||
// Merge ip_mac and update other infos
|
|
||||||
peer1.ip_mac.extend(peer.ip_mac.clone());
|
|
||||||
peer1.hostname = peer.hostname.clone();
|
|
||||||
peer1.platform = peer.platform.clone();
|
|
||||||
peer1.online = true;
|
|
||||||
} else {
|
|
||||||
// Update all peer infos
|
|
||||||
*peer1 = peer.clone();
|
|
||||||
}
|
|
||||||
pre_found = true;
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Push if not found
|
peers.insert(0, peer);
|
||||||
if !pre_found {
|
|
||||||
peers.push(peer);
|
|
||||||
}
|
|
||||||
|
|
||||||
if last_write_time.elapsed().as_millis() > 300 {
|
if last_write_time.elapsed().as_millis() > 300 {
|
||||||
config::LanPeers::store(&peers);
|
config::LanPeers::store(&peers);
|
||||||
last_write_time = Instant::now();
|
last_write_time = Instant::now();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user