2017-07-10 21:21:16 +00:00
|
|
|
use ffi;
|
|
|
|
use glib::translate::*;
|
|
|
|
use glib;
|
|
|
|
use std::ptr;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Gets whether or not libnotify is initialized.
|
|
|
|
///
|
|
|
|
/// # Returns
|
|
|
|
///
|
|
|
|
/// `true` if libnotify is initialized, or `false` otherwise.
|
|
|
|
pub fn is_initted() -> bool {
|
2017-07-11 13:24:10 +00:00
|
|
|
unsafe { from_glib(ffi::notify_is_initted()) }
|
2017-07-10 21:21:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Initialized libnotify. This must be called before any other functions.
|
|
|
|
///
|
|
|
|
/// # Returns
|
|
|
|
///
|
|
|
|
/// `Ok(())` if successful, `Err(err)` on error.
|
|
|
|
pub fn init(app_name: &str) -> Result<(), glib::error::BoolError> {
|
|
|
|
unsafe {
|
2017-07-11 13:24:10 +00:00
|
|
|
glib::error::BoolError::from_glib(
|
|
|
|
ffi::notify_init(app_name.to_glib_none().0),
|
|
|
|
"Failed to initialize libnotify",
|
|
|
|
)
|
2017-07-10 21:21:16 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Gets the application name registered.
|
|
|
|
///
|
|
|
|
/// # Returns
|
|
|
|
///
|
|
|
|
/// The registered application name, passed to `init()`.
|
|
|
|
pub fn get_app_name() -> Option<String> {
|
|
|
|
assert_initialized_libnotify!();
|
2017-07-11 13:24:10 +00:00
|
|
|
unsafe { from_glib_none(ffi::notify_get_app_name()) }
|
2017-07-10 21:21:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Synchronously queries the server for its capabilities and returns them as
|
|
|
|
/// a Vector.
|
|
|
|
///
|
|
|
|
/// # Returns
|
|
|
|
///
|
|
|
|
/// A Vector of server capability Strings.
|
|
|
|
pub fn get_server_caps() -> Vec<String> {
|
|
|
|
assert_initialized_libnotify!();
|
|
|
|
unsafe {
|
|
|
|
FromGlibPtrContainer::from_glib_full(ffi::notify_get_server_caps())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Synchronously queries the server for its information, specifically,
|
|
|
|
/// the name, vendor, server version, and the version of the notifications
|
|
|
|
/// specification that it is compliant with.
|
|
|
|
///
|
|
|
|
/// # Returns
|
|
|
|
///
|
|
|
|
/// `Some(ret_name, ret_vendor, ret_version, ret_spec_version)` on
|
|
|
|
/// success, otherwise `None` on error.
|
|
|
|
pub fn get_server_info() -> Option<(String, String, String, String)> {
|
|
|
|
assert_initialized_libnotify!();
|
|
|
|
unsafe {
|
|
|
|
let mut ret_name = ptr::null_mut();
|
|
|
|
let mut ret_vendor = ptr::null_mut();
|
|
|
|
let mut ret_version = ptr::null_mut();
|
|
|
|
let mut ret_spec_version = ptr::null_mut();
|
2017-07-11 13:24:10 +00:00
|
|
|
let ret = from_glib(ffi::notify_get_server_info(
|
|
|
|
&mut ret_name,
|
|
|
|
&mut ret_vendor,
|
|
|
|
&mut ret_version,
|
|
|
|
&mut ret_spec_version,
|
|
|
|
));
|
|
|
|
if ret {
|
|
|
|
Some((
|
|
|
|
from_glib_full(ret_name),
|
|
|
|
from_glib_full(ret_vendor),
|
|
|
|
from_glib_full(ret_version),
|
|
|
|
from_glib_full(ret_spec_version),
|
|
|
|
))
|
|
|
|
} else {
|
|
|
|
None
|
|
|
|
}
|
2017-07-10 21:21:16 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Sets the application name.
|
|
|
|
/// ## `app_name`
|
|
|
|
/// The name of the application.
|
|
|
|
pub fn set_app_name(app_name: &str) {
|
|
|
|
assert_initialized_libnotify!();
|
|
|
|
unsafe {
|
|
|
|
ffi::notify_set_app_name(app_name.to_glib_none().0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Uninitialized libnotify.
|
|
|
|
///
|
|
|
|
/// This should be called when the program no longer needs libnotify for
|
|
|
|
/// the rest of its lifecycle, typically just before exitting.
|
|
|
|
pub fn uninit() {
|
|
|
|
assert_initialized_libnotify!();
|
|
|
|
unsafe {
|
|
|
|
ffi::notify_uninit();
|
|
|
|
}
|
|
|
|
}
|