SNot/src/main.rs

79 lines
2.3 KiB
Rust
Raw Normal View History

use std::collections::HashMap;
2024-08-20 04:56:36 +00:00
use std::fmt;
2024-08-20 21:02:06 +00:00
use zbus_notification::NotifyUnit;
// Structure of a notification
2024-08-11 11:31:05 +00:00
struct Notif {
app_name: String,
replace_id: Option<u32>,
ico: String,
2024-08-11 11:31:05 +00:00
summary: String,
body: String,
actions: Vec<(String, String)>,
hints: HashMap<String, String>,
expir_timeout: Option<u32>,
}
// Function to print the contents of the notification
impl fmt::Display for Notif {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2024-08-20 04:56:36 +00:00
writeln!(f, "AppName: {}", &self.app_name)?;
match self.replace_id {
2024-08-20 04:56:36 +00:00
Some(notif_id) => writeln!(f, "ReplaceId: {notif_id}")?,
None => writeln!(f, "None")?,
}
2024-08-20 04:56:36 +00:00
write!(
f,
"Icon: {}\nSummary: {}\nBody: {}\nActions:\n",
&self.ico, &self.summary, &self.body
)?;
for (key, label) in &self.actions {
2024-08-20 04:56:36 +00:00
writeln!(f, "\t{key}: {label}")?;
}
2024-08-20 04:56:36 +00:00
writeln!(f, "Hints:")?;
for (key, value) in &self.hints {
2024-08-20 04:56:36 +00:00
writeln!(f, "\t{key}: {value}")?;
}
match self.expir_timeout {
2024-08-20 04:56:36 +00:00
Some(millisec) => writeln!(f, "Expiration Timeout: {millisec}")?,
None => writeln!(f, "None")?,
}
Ok(()) // Return Ok to indicate success
}
}
2024-08-11 11:31:05 +00:00
// Summary should be generally <= 40 chars, as per the specification.
fn truncate_summary(notif: &mut Notif) {
if notif.summary.len() > 40 {
notif.summary.truncate(39);
2024-08-20 04:56:36 +00:00
notif.summary.push('…');
}
2024-08-11 11:31:05 +00:00
}
2024-08-11 11:31:05 +00:00
fn main() {
// Example notif
2024-08-11 11:31:05 +00:00
let mut not = Notif {
app_name: "snot".to_string(),
replace_id: Some(0),
ico: "alert.png".to_string(),
2024-08-11 11:31:05 +00:00
summary: "This is a very long suuummmaaarrryyy! Don't you believe me????".to_string(),
body: "short body(hehe)".to_string(),
actions: vec![
("reply".to_string(), "Reply".to_string()),
("close".to_string(), "Close".to_string()),
],
hints: HashMap::new(), // Create an empty HashMap for hints, add the hints later
2024-08-20 04:56:36 +00:00
expir_timeout: Some(0),
2024-08-11 11:31:05 +00:00
};
2024-08-20 04:56:36 +00:00
not.hints
.insert("urgency".to_string(), "critical".to_string());
not.hints
.insert("category".to_string(), "network.error".to_string());
2024-08-20 21:02:06 +00:00
// End of eg. notif
2024-08-11 11:32:35 +00:00
truncate_summary(&mut not); //Limit the summary length
2024-08-20 04:56:36 +00:00
2024-08-20 21:02:06 +00:00
2024-08-20 04:56:36 +00:00
println!("{not}");
}