use std::{
ffi::CStr,
path::PathBuf,
time::{Duration, SystemTime, UNIX_EPOCH},
};
use mpdclient_sys::{mpd_directory, mpd_directory_get_last_modified, mpd_directory_get_path};
#[derive(Debug)]
pub struct Directory {
inner: *mut mpd_directory,
}
impl Directory {
pub(super) fn new(mpd_directory: *mut mpd_directory) -> Self {
Self {
inner: mpd_directory,
}
}
#[must_use]
pub fn path(&self) -> PathBuf {
let path = unsafe {
let ptr = mpd_directory_get_path(self.inner);
CStr::from_ptr(ptr).to_string_lossy().to_string()
};
PathBuf::from(path)
}
#[allow(clippy::cast_sign_loss)]
#[must_use]
pub fn last_modified(&self) -> Option<SystemTime> {
let time = unsafe { mpd_directory_get_last_modified(self.inner) };
if time == 0 {
None
} else {
Some(UNIX_EPOCH + Duration::from_secs(time as u64))
}
}
}
unsafe impl Send for Directory {}