safing-portmaster/desktop/tauri/rust-dark-light/src/platforms/websys/notify.rs
2025-02-25 11:34:21 +02:00

23 lines
540 B
Rust

use std::task::Poll;
use futures::{stream, Stream};
use crate::{detect, Mode};
pub async fn subscribe() -> anyhow::Result<impl Stream<Item = Mode> + Send> {
let mut last_mode = detect();
let stream = stream::poll_fn(move |ctx| -> Poll<Option<Mode>> {
let current_mode = detect();
if current_mode != last_mode {
last_mode = current_mode;
Poll::Ready(Some(current_mode))
} else {
ctx.waker().wake_by_ref();
Poll::Pending
}
});
Ok(stream)
}