enveloped_clipboard_monitor/
enveloped_clipboard_monitor.rs1use std::time::Duration;
2
3use lcsa_core::{
4 ApplicationContext, Capability, ContextApi, DeviceClass, DeviceContext, PermissionRequest,
5 Platform, Scope, SignalType,
6};
7
8fn main() -> Result<(), Box<dyn std::error::Error>> {
9 let mut api = ContextApi::builder()
10 .device_context(DeviceContext {
11 device_id: "desktop:devbox".to_string(),
12 device_name: "devbox".to_string(),
13 platform: Platform::Linux,
14 device_class: DeviceClass::Desktop,
15 os_version: None,
16 })
17 .application_context(ApplicationContext {
18 app_id: "lcsa-demo".to_string(),
19 app_name: "lcsa-demo".to_string(),
20 app_version: Some("0.1.0".to_string()),
21 })
22 .build()?;
23
24 api.request_permission(
25 PermissionRequest::new(
26 Capability::ReadClipboardContent,
27 Scope::Session,
28 "Demonstrate cross-device envelopes plus gated content access",
29 )
30 .with_ttl(Duration::from_secs(300)),
31 )?;
32
33 api.subscribe_enveloped(SignalType::Clipboard, |envelope| {
34 println!(
35 "envelope={} device={} app={} source={:?}",
36 envelope.signal_id,
37 envelope.device.device_id,
38 envelope.application.app_id,
39 envelope.source
40 );
41 })?;
42
43 println!("Monitoring enveloped clipboard signals. Press Ctrl+C to exit.");
44 api.run_with_signals()?;
45 Ok(())
46}