Skip to main content

enveloped_clipboard_monitor/
enveloped_clipboard_monitor.rs

1use 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}