Fix filter not letting beacons through after the first one

This commit is contained in:
Maxime Augier 2024-04-20 12:29:01 +02:00
parent 649af90de8
commit 556599609a

View File

@ -1,6 +1,6 @@
use std::{collections::HashMap, convert::Infallible, sync::Arc, time::{SystemTime, UNIX_EPOCH}}; use std::{collections::HashMap, convert::Infallible, sync::Arc, time::{SystemTime, UNIX_EPOCH}};
use bluer::{self, Adapter, AdapterEvent, Address}; use bluer::{self, Adapter, AdapterEvent, Address, DiscoveryFilter, DiscoveryTransport};
use anyhow::Result; use anyhow::Result;
use futures::{Stream, StreamExt}; use futures::{Stream, StreamExt};
@ -86,7 +86,7 @@ async fn main() -> Result<()> {
sniffer_store.lock().await.insert(data, SystemTime::now()); sniffer_store.lock().await.insert(data, SystemTime::now());
} }
}); });
let filter = let filter =
warp::path!("metrics") warp::path!("metrics")
.map(move || Arc::clone(&store)) .map(move || Arc::clone(&store))
@ -108,6 +108,13 @@ async fn extract(adapter: Arc<Adapter>, evt: AdapterEvent) -> Option<Data> {
} }
async fn sensor_reports<'a>(adapter: Arc<Adapter>) -> Result<impl Stream<Item=Data> + 'a> { async fn sensor_reports<'a>(adapter: Arc<Adapter>) -> Result<impl Stream<Item=Data> + 'a> {
let filter = DiscoveryFilter {
transport: DiscoveryTransport::Le,
duplicate_data: true,
..Default::default() };
adapter.set_discovery_filter(filter).await?;
Ok(adapter.discover_devices_with_changes().await? Ok(adapter.discover_devices_with_changes().await?
.filter_map(move |evt| { extract(Arc::clone(&adapter), evt) })) .filter_map(move |evt| { extract(Arc::clone(&adapter), evt) }))
} }