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;