mod error;
use std::time::Duration;
pub use error::Error;
#[cfg(all(target_os = "linux", not(feature = "dbus")))]
#[path = "x11_impl.rs"]
mod idle;
#[cfg(all(target_os = "linux", feature = "dbus"))]
#[path = "dbus_impl.rs"]
mod idle;
#[cfg(target_os = "windows")]
#[path = "windows_impl.rs"]
mod idle;
#[cfg(target_os = "macos")]
#[path = "macos_impl.rs"]
mod idle;
pub struct UserIdle {
duration: Duration,
}
impl UserIdle {
pub fn get_time() -> Result<Self, Error> {
Ok(UserIdle {
duration: idle::get_idle_time()?,
})
}
pub fn as_nanoseconds(&self) -> u128 {
self.duration.as_nanos()
}
pub fn as_milliseconds(&self) -> u128 {
self.duration.as_millis()
}
pub fn as_seconds(&self) -> u64 {
self.duration.as_secs()
}
pub fn as_minutes(&self) -> u64 {
self.as_seconds() / 60
}
pub fn as_hours(&self) -> u64 {
self.as_minutes() / 60
}
pub fn as_days(&self) -> u64 {
self.as_hours() / 24
}
pub fn as_weeks(&self) -> u64 {
self.as_days() / 7
}
pub fn as_months(&self) -> u64 {
self.as_weeks() / 4
}
pub fn as_years(&self) -> u64 {
self.as_months() / 12
}
pub fn duration(&self) -> Duration {
self.duration
}
}
#[cfg(test)]
mod test {
use std::{thread::sleep, time::Duration};
use super::UserIdle;
const TEST_SECS: u64 = 10;
#[test]
fn main() {
sleep(Duration::from_secs(TEST_SECS));
let idle = UserIdle::get_time().unwrap();
assert_eq!(idle.as_seconds(), TEST_SECS);
}
}