use std::ffi::CString;
use std::marker::PhantomData;
use wxdragon_sys as ffi;
pub struct SingleInstanceChecker {
ptr: *mut ffi::wxd_SingleInstanceChecker_t,
_marker: PhantomData<*const ()>,
}
impl SingleInstanceChecker {
pub fn new(name: &str, path: Option<&str>) -> Option<Self> {
let c_name = CString::new(name).ok()?;
let c_path = path.and_then(|p| CString::new(p).ok());
let ptr = unsafe {
ffi::wxd_SingleInstanceChecker_Create(c_name.as_ptr(), c_path.as_ref().map_or(std::ptr::null(), |s| s.as_ptr()))
};
if ptr.is_null() {
None
} else {
Some(Self {
ptr,
_marker: PhantomData,
})
}
}
pub fn new_default() -> Option<Self> {
let ptr = unsafe { ffi::wxd_SingleInstanceChecker_CreateDefault() };
if ptr.is_null() {
None
} else {
Some(Self {
ptr,
_marker: PhantomData,
})
}
}
pub fn is_another_running(&self) -> bool {
if self.ptr.is_null() {
return false;
}
unsafe { ffi::wxd_SingleInstanceChecker_IsAnotherRunning(self.ptr) }
}
}
impl Drop for SingleInstanceChecker {
fn drop(&mut self) {
if !self.ptr.is_null() {
unsafe { ffi::wxd_SingleInstanceChecker_Destroy(self.ptr) };
}
}
}