diff --git a/src/main.rs b/src/main.rs index 43bf87f..8c3b06a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,35 @@ use futures_util::stream::TryStreamExt; -use zbus::{Connection, Result}; +use std::collections::HashMap; +use zbus::{message::Body, Connection, Result}; +use zvariant::OwnedValue; + +fn print_notif(msg_body: Body) -> Result<()> { + // Deserialize the message body to the expected tuple + let (app_name, replace_id, icon, summary, body, actions, hints, expir_timeout): ( + String, + u32, + String, + String, + String, + Vec, + HashMap, + i32, + ) = msg_body.deserialize()?; + // Print the notification details + println!("App Name: {app_name}"); + println!("Replace ID: {replace_id}"); + println!("Icon: {icon}"); + println!("Summary: {summary}"); + println!("Body: {body}"); + println!("Actions: {actions:?}"); + println!("Hints:"); + for (key, value) in hints { + println!(" {key}: {value:?}"); + } + println!("Expiration Timeout: {expir_timeout} seconds"); + + Ok(()) +} #[tokio::main] async fn main() -> Result<()> { @@ -13,19 +43,27 @@ async fn main() -> Result<()> { while let Some(msg) = stream.try_next().await? { // Check if the message is a method call to the "Notify" method if let Some(member) = msg.header().member().map(|m| m.as_str()) { - if member == "GetServerInformation" { - println!("Member is: {}", member); - // Respond with server information - let response = ("SNot", "candifloss.cc", "0.1.0", "1.0"); // (name, vendor, version, spec_version) - connection.reply(&msg, &response).await?; - } else if member == "Notify" { - println!("Member is: {}", member); - // Respond with a notification ID (usually a unique number) - let notification_id: u32 = 1; // This could be incremented or generated - connection.reply(&msg, ¬ification_id).await?; - } else { - println!("Unhandled method: {}", member); - } + match member { + "GetServerInformation" => { + println!("Member is: {member}"); + // Respond with server information + let response = ("SNot", "candifloss.cc", "0.1.0", "1.0"); // (name, vendor, version, spec_version) + connection.reply(&msg, &response).await?; + } + "Notify" => { + println!("Member is: {member}"); + // Handle notif + let msg_body = msg.body(); + // get the app_name, summary, body, etc. from the msg_body and print it + let _ = print_notif(msg_body); + // Done. Respond with a notification ID + let notification_id: u32 = 1; // This could be incremented or generated + connection.reply(&msg, ¬ification_id).await?; + } + _ => { + println!("Unhandled method: {member}"); + } + }; } }