I would like to send desktop notifications through D-BUS using https://crates.io/crates/dbus.
My current approach is:
let c = Connection::get_private(BusType::Session).unwrap();
//let m = Message::new_method_call("org.freedesktop.DBus", "/", "org.freedesktop.DBus", "ListNames").unwrap();
let mut m = Message::new_method_call(
"org.freedesktop.Notifications",
"/org/freedesktop/Notifications",
"org.freedesktop.Notifications",
"Notify"
).unwrap();
m.append_items(&[
MessageItem::Str("appname".to_string()), // appname
MessageItem::UInt32(0), // notification to update
MessageItem::Str("icon".to_string()), // icon
MessageItem::Str("summary".to_string()), // summary (title)
MessageItem::Str("body".to_string()), // body
???, // actions
???, // hints
MessageItem::UInt32(9000), // timeout
]);
I can't think of a meaningful way to satisfy the interface of the Notify
method. According to D-Feet, it looks like this:
Notify(
String app_name,
UInt32 replaces_id,
String app_icon,
String summary,
String body,
Array of [String] actions,
Dict of {String, Variant} hints,
Int32
)
Especially the Array of [String]
, Dict of {String, Variant}
puzzles me.
After a while I figured this out with @payload
m.append_items(&[
MessageItem::Str(appname.to_string()), // appname
MessageItem::UInt32(0), // notification to update
MessageItem::Str(icon.to_string()), // icon
MessageItem::Str(summary.to_string()), // summary (title)
MessageItem::Str(body.to_string()), // body
MessageItem::new_array( // actions
vec!( MessageItem::Str("".to_string()))),
MessageItem::new_array( // hints
vec!(
MessageItem::DictEntry(
Box::new(MessageItem::Str("".to_string())),
Box::new(MessageItem::Variant(
Box::new(MessageItem::Str("".to_string()))
))
),
)
),
MessageItem::Int32(9000), // timeout
]);
My little fun project where I use this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With