This commit is contained in:
Candifloss 2024-09-17 12:17:05 +05:30
parent d4f2140f55
commit a62a6f8b9a
2 changed files with 17 additions and 13 deletions

View File

@ -7,7 +7,7 @@ use zbus::{Connection, Result};
const SERVER_NAME: &str = "SNot"; const SERVER_NAME: &str = "SNot";
const VENDOR: &str = "candifloss.cc"; const VENDOR: &str = "candifloss.cc";
const VERSION: &str = "0.1.0"; const VERSION: &str = "0.1.0";
const SPEC_VERSION: &str = "0.1.0"; const SPEC_VERSION: &str = "1.0";
#[tokio::main] #[tokio::main]
async fn main() -> Result<()> { async fn main() -> Result<()> {
@ -27,7 +27,7 @@ async fn main() -> Result<()> {
// Respond with server information // Respond with server information
let response = (SERVER_NAME, VENDOR, VERSION, SPEC_VERSION); // (name, vendor, version, spec_version) let response = (SERVER_NAME, VENDOR, VERSION, SPEC_VERSION); // (name, vendor, version, spec_version)
connection.reply(&msg, &response).await?; connection.reply(&msg, &response).await?;
println!("Request received: {member}\n\tName: {SERVER_NAME}\n\tVendor: {VENDOR}\n\tVersion: {VERSION}\n\tSpec_version: {SPEC_VERSION}"); println!("Request received: {member}\n\tName: {SERVER_NAME},\tVendor: {VENDOR},\tVersion: {VERSION},\tSpec_version: {SPEC_VERSION}");
} }
"GetCapabilities" => { "GetCapabilities" => {
// Respond with supported capabilities // Respond with supported capabilities

View File

@ -3,18 +3,20 @@ use zbus::{message::Body, Result};
use zvariant::OwnedValue; use zvariant::OwnedValue;
pub struct Notification { pub struct Notification {
app_name: String, // A notificaion object
replace_id: u32, app_name: String, // The application that sent the notification
icon: String, replace_id: u32, // (Optional) ID of an existing notification to be updated, replaced by this
summary: String, icon: String, // See icon specifications: https://specifications.freedesktop.org/notification-spec/latest/icons-and-images.html
body: String, summary: String, // Notification title
actions: Vec<String>, body: String, // Notification content/body
hints: HashMap<String, OwnedValue>, actions: Vec<String>, // Action requests that can be sent back to the client -
expir_timeout: i32, hints: HashMap<String, OwnedValue>, // Extra useful data - notif type, urgency, sound file, icon data, etc.
expir_timeout: i32, // Seconds till this notif expires. Optional
} }
impl Notification { impl Notification {
pub fn urgency(&self) -> String { pub fn urgency(&self) -> String {
// Obtain urgency
match self.hints.get("urgency") { match self.hints.get("urgency") {
Some(value) => { Some(value) => {
// Attempt to convert OwnedValue to u8 // Attempt to convert OwnedValue to u8
@ -22,18 +24,20 @@ impl Notification {
Ok(0) => "Low".to_string(), Ok(0) => "Low".to_string(),
Ok(1) => "Normal".to_string(), Ok(1) => "Normal".to_string(),
Ok(2) => "Critical".to_string(), Ok(2) => "Critical".to_string(),
_ => "Unknown".to_string(), _ => "Other".to_string(), // There are no accepted values other that these 3
} }
} }
None => "Unknown".to_string(), None => "Unknown".to_string(), // This possibly never occurs, or something might be wrong
} }
} }
} }
pub fn to_notif(msg_body: &Body) -> Result<Notification> { pub fn to_notif(msg_body: &Body) -> Result<Notification> {
// Convert the DBus message body into Notification
let (app_name, replace_id, icon, summary, body, actions, hints, expir_timeout) = let (app_name, replace_id, icon, summary, body, actions, hints, expir_timeout) =
msg_body.deserialize()?; msg_body.deserialize()?; // Deserialized into a tuple
Ok(Notification { Ok(Notification {
// Make a Notification object from the obtained tuple
app_name, app_name,
replace_id, replace_id,
icon, icon,