//! # Notifications //! //! This module exposes the function to send notifications to the guest OS #[cfg(all(unix, not(target_os = "macos")))] use notify_rust::Hint; use notify_rust::{Notification as OsNotification, Timeout}; /// ## Notification /// /// A notification helper which provides all the functions to send the available notifications for termscp pub struct Notification; impl Notification { /// ### transfer_completed /// /// Notify a transfer has been completed with success pub fn transfer_completed>(body: S) { Self::notify( "Transfer completed ✅", body.as_ref(), Some("transfer.complete"), ); } /// ### transfer_error /// /// Notify a transfer has failed pub fn transfer_error>(body: S) { Self::notify("Transfer failed ❌", body.as_ref(), Some("transfer.error")); } /// ### update_available /// /// Notify a new version of termscp is available for download pub fn update_available>(version: S) { Self::notify( "New version available ⬇️", format!("termscp {} is now available for download", version.as_ref()).as_str(), None, ); } /// ### update_installed /// /// Notify the update has been correctly installed pub fn update_installed>(version: S) { Self::notify( "Update installed 🎉", format!("termscp {} has been installed! Restart termscp to enjoy the latest version of termscp 🙂", version.as_ref()).as_str(), None, ); } /// ### update_failed /// /// Notify the update installation has failed pub fn update_failed>(err: S) { Self::notify("Update installation failed ❌", err.as_ref(), None); } /// ### notify /// /// Notify guest OS with provided Summary, body and optional category /// e.g. Category is supported on FreeBSD/Linux only #[allow(unused_variables)] fn notify(summary: &str, body: &str, category: Option<&str>) { let mut notification = OsNotification::new(); // Set common params notification .appname(env!("CARGO_PKG_NAME")) .summary(summary) .body(body) .timeout(Timeout::Milliseconds(10000)); // Set category if any #[cfg(all(unix, not(target_os = "macos")))] if let Some(category) = category { notification.hint(Hint::Category(category.to_string())); } let _ = notification.show(); } }