gsmtc/
lib.rs

1//! This library is a wrapper around the [`Windows.Media.Control`](https://learn.microsoft.com/uwp/api/windows.media.control) namespace (aka `GlobalSystemMediaTransportControls` - GSMTC).
2//! It uses [`tokio`](https://docs.rs/tokio) to manage internal workers that deliver updates.
3//!
4//! ### Example
5//!
6//! ```no_run
7//! # use windows::core::Result;
8//! # #[tokio::main]
9//! # async fn main() -> Result<()> {
10//! use gsmtc::{ManagerEvent::*, SessionUpdateEvent::*};
11//!
12//! let mut rx = gsmtc::SessionManager::create().await?;
13//!
14//! while let Some(evt) = rx.recv().await {
15//!     match evt {
16//!         SessionCreated {
17//!             session_id,
18//!             mut rx,
19//!             source,
20//!         } => {
21//!             println!("Created session: {{id={session_id}, source={source}}}");
22//!             tokio::spawn(async move {
23//!                 while let Some(evt) = rx.recv().await {
24//!                     match evt {
25//!                         Model(model) => {
26//!                             println!("[{session_id}/{source}] Model updated: {model:#?}")
27//!                         }
28//!                         Media(model, image) => println!(
29//!                             "[{session_id}/{source}] Media updated: {model:#?} - {image:?}"
30//!                         ),
31//!                     }
32//!                 }
33//!                 println!("[{session_id}/{source}] exited event-loop");
34//!             });
35//!         }
36//!         SessionRemoved { session_id } => println!("Session {{id={session_id}}} was removed"),
37//!         CurrentSessionChanged {
38//!             session_id: Some(id),
39//!         } => println!("Current session: {id}"),
40//!         CurrentSessionChanged { session_id: None } => println!("No more current session"),
41//!     }
42//! }
43//! # Ok(())
44//! # }
45//! ```
46mod conversion;
47mod manager;
48mod model;
49mod session;
50mod util;
51
52pub use manager::{ManagerEvent, SessionManager};
53pub use model::*;
54pub use session::SessionUpdateEvent;