diff --git a/aquatic_http/src/lib/tasks.rs b/aquatic_http/src/lib/tasks.rs index cabc4a0..494e65c 100644 --- a/aquatic_http/src/lib/tasks.rs +++ b/aquatic_http/src/lib/tasks.rs @@ -20,8 +20,25 @@ fn clean_torrent_map( let now = Instant::now(); torrent_map.retain(|_, torrent_data| { + let num_seeders = &mut torrent_data.num_seeders; + let num_leechers = &mut torrent_data.num_leechers; + torrent_data.peers.retain(|_, peer| { - peer.valid_until.0 >= now + let keep = peer.valid_until.0 >= now; + + if !keep { + match peer.status { + PeerStatus::Seeding => { + *num_seeders -= 1; + }, + PeerStatus::Leeching => { + *num_leechers -= 1; + }, + _ => (), + }; + } + + keep }); !torrent_data.peers.is_empty() diff --git a/aquatic_ws/src/lib/tasks.rs b/aquatic_ws/src/lib/tasks.rs index 159477f..e8708a8 100644 --- a/aquatic_ws/src/lib/tasks.rs +++ b/aquatic_ws/src/lib/tasks.rs @@ -12,8 +12,25 @@ pub fn clean_torrents(state: &State){ let now = Instant::now(); torrent_map.retain(|_, torrent_data| { + let num_seeders = &mut torrent_data.num_seeders; + let num_leechers = &mut torrent_data.num_leechers; + torrent_data.peers.retain(|_, peer| { - peer.valid_until.0 >= now + let keep = peer.valid_until.0 >= now; + + if !keep { + match peer.status { + PeerStatus::Seeding => { + *num_seeders -= 1; + }, + PeerStatus::Leeching => { + *num_leechers -= 1; + }, + _ => (), + }; + } + + keep }); !torrent_data.peers.is_empty()