fix(bluetooth): stop discovery on leave asynchrously

This commit is contained in:
Michael Aaron Murphy 2025-06-12 13:39:42 +02:00
parent 55b0b19135
commit 66039e574e
No known key found for this signature in database
GPG key ID: B2732D4240C9212C

View file

@ -194,6 +194,8 @@ impl page::Page<crate::pages::Message> for Page {
} }
fn on_leave(&mut self) -> Task<crate::pages::Message> { fn on_leave(&mut self) -> Task<crate::pages::Message> {
let mut task = Task::none();
if let Some(cancel) = self.subscription.take() { if let Some(cancel) = self.subscription.take() {
_ = cancel.send(()); _ = cancel.send(());
} }
@ -201,19 +203,19 @@ impl page::Page<crate::pages::Message> for Page {
if let Some(connection) = self.connection.take() { if let Some(connection) = self.connection.take() {
let adapters = self.model.adapters.clone(); let adapters = self.model.adapters.clone();
// Block the current thread to ensure that discovery is stopped // Execute within task to ensure it completes before the app exits.
// on all adapters when the app is closed. task = Task::future(async move {
Handle::current().block_on(async move {
for (path, _) in adapters { for (path, _) in adapters {
stop_discovery(connection.clone(), path.clone()).await; stop_discovery(connection.clone(), path.clone()).await;
} }
_ = agent::unregister(connection).await; _ = agent::unregister(connection).await;
}); })
.discard();
} }
self.model.clear(); self.model.clear();
Task::none() task
} }
fn dialog(&self) -> Option<Element<'_, crate::pages::Message>> { fn dialog(&self) -> Option<Element<'_, crate::pages::Message>> {