use notify_rust::Timeout;
use std::fmt;
#[derive(Debug)]
pub struct Notification {
pub app_name: String,
pub summary: String,
pub body: String,
pub icon_path: String,
pub timeout: NotificationTimeout,
}
#[derive(Debug, PartialEq, Clone)]
pub enum NotificationTimeout {
Default,
Never,
Milliseconds(u32),
}
impl Into<Timeout> for NotificationTimeout {
fn into(self) -> Timeout {
match self {
NotificationTimeout::Default => Timeout::Default,
NotificationTimeout::Never => Timeout::Never,
NotificationTimeout::Milliseconds(ms) => Timeout::Milliseconds(ms),
}
}
}
impl Notification {
pub fn new() -> Self {
Notification {
app_name: "".to_string(),
summary: "".to_string(),
body: "".to_string(),
icon_path: "".to_string(),
timeout: NotificationTimeout::Default,
}
}
pub fn show(&self) -> Result<(), NotificationError> {
let result = notify_rust::Notification::new()
.appname(&self.app_name)
.summary(&self.summary)
.body(&self.body)
.icon(&self.icon_path)
.timeout(self.timeout.clone())
.show();
match result {
Ok(_) => Ok(()),
Err(e) => Err(NotificationError::FailedToShowNotification(e.to_string())),
}
}
pub fn app_name(&mut self, value: String) -> &mut Self {
self.app_name = value;
self
}
pub fn summary(&mut self, value: String) -> &mut Self {
self.summary = value;
self
}
pub fn body(&mut self, value: String) -> &mut Self {
self.body = value;
self
}
pub fn icon_path(&mut self, value: String) -> &mut Self {
self.icon_path = value;
self
}
pub fn timeout(&mut self, value: NotificationTimeout) -> &mut Self {
self.timeout = value;
self
}
}
#[test]
fn test_notification() {
Notification::new()
.app_name("dioxus test".to_string())
.summary("hi, this is dioxus test".to_string())
.body("lorem ipsum??".to_string())
.show()
.unwrap();
}
#[derive(Debug)]
pub enum NotificationError {
FailedToShowNotification(String),
}
impl std::error::Error for NotificationError {}
impl fmt::Display for NotificationError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
NotificationError::FailedToShowNotification(s) => write!(f, "{}", s),
}
}
}