Improvements for api
Better error handling, focused on using in other crates
This commit is contained in:
parent
26ab019c26
commit
89a8cad693
|
@ -6,7 +6,5 @@ edition = "2021"
|
||||||
[profile.release]
|
[profile.release]
|
||||||
strip = true
|
strip = true
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
x11 = { version = "2.20.0", features = ["xss", "xlib"] }
|
x11 = { version = "2.20.0", features = ["xss", "xlib"] }
|
||||||
|
|
44
src/lib.rs
44
src/lib.rs
|
@ -1,7 +1,7 @@
|
||||||
mod xinterface {
|
mod xinterface {
|
||||||
|
use std::ffi::c_void;
|
||||||
use x11::xlib::{XCloseDisplay, XDefaultRootWindow, XFree, XOpenDisplay};
|
use x11::xlib::{XCloseDisplay, XDefaultRootWindow, XFree, XOpenDisplay};
|
||||||
use x11::xss::{XScreenSaverAllocInfo, XScreenSaverQueryExtension, XScreenSaverQueryInfo};
|
use x11::xss::{XScreenSaverAllocInfo, XScreenSaverQueryExtension, XScreenSaverQueryInfo};
|
||||||
use std::ffi::c_void;
|
|
||||||
|
|
||||||
pub struct Display {
|
pub struct Display {
|
||||||
display_ptr: *mut x11::xlib::Display,
|
display_ptr: *mut x11::xlib::Display,
|
||||||
|
@ -24,11 +24,8 @@ mod xinterface {
|
||||||
let mut event_basep: i32 = 0;
|
let mut event_basep: i32 = 0;
|
||||||
let mut error_basep: i32 = 0;
|
let mut error_basep: i32 = 0;
|
||||||
unsafe {
|
unsafe {
|
||||||
XScreenSaverQueryExtension(
|
XScreenSaverQueryExtension(self.display_ptr, &mut event_basep, &mut error_basep)
|
||||||
self.display_ptr,
|
!= 0
|
||||||
&mut event_basep,
|
|
||||||
&mut error_basep
|
|
||||||
) != 0
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,21 +76,32 @@ mod xinterface {
|
||||||
|
|
||||||
use xinterface::Display;
|
use xinterface::Display;
|
||||||
|
|
||||||
pub fn get_idle_time() -> u64 {
|
pub enum Error {
|
||||||
let display = Display::open().unwrap_or_else(|_| {
|
CannotOpenDisplay,
|
||||||
println!("Cannot open display");
|
NoScreenSaverExtension,
|
||||||
std::process::exit(1);
|
CannotGetScreenSaverinfo,
|
||||||
});
|
}
|
||||||
|
|
||||||
|
impl Error {
|
||||||
|
pub fn message(&self) -> &'static str {
|
||||||
|
match self {
|
||||||
|
Self::CannotOpenDisplay => "Cannot open display",
|
||||||
|
Self::NoScreenSaverExtension => "Screen doesn't have screen saver extension",
|
||||||
|
Self::CannotGetScreenSaverinfo => "Cannot get screen saver info",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_idle_time() -> Result<u64, Error> {
|
||||||
|
let display = Display::open().or(Err(Error::CannotOpenDisplay))?;
|
||||||
|
|
||||||
if !display.has_screen_saver_extesnsion() {
|
if !display.has_screen_saver_extesnsion() {
|
||||||
println!("Screen doesn't have screen saver extension");
|
return Err(Error::NoScreenSaverExtension);
|
||||||
std::process::exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let screen_saver_info = display.get_screen_saver_info().unwrap_or_else(|_| {
|
let screen_saver_info = display
|
||||||
println!("Cannot get screen saver info");
|
.get_screen_saver_info()
|
||||||
std::process::exit(1);
|
.or(Err(Error::CannotGetScreenSaverinfo))?;
|
||||||
});
|
|
||||||
|
|
||||||
screen_saver_info.idle_time()
|
Ok(screen_saver_info.idle_time())
|
||||||
}
|
}
|
||||||
|
|
12
src/main.rs
12
src/main.rs
|
@ -1,3 +1,11 @@
|
||||||
fn main() {
|
fn error(error: rs_idle::Error) -> ! {
|
||||||
println!("{}", rs_idle::get_idle_time());
|
println!("{}", error.message());
|
||||||
|
std::process::exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!(
|
||||||
|
"{}",
|
||||||
|
rs_idle::get_idle_time().unwrap_or_else(|e| { error(e) })
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue