use std::fmt::{Debug, Formatter};
pub use windows::Win32::System::Com::{
STGM, STGM_CONVERT, STGM_CREATE, STGM_DELETEONRELEASE, STGM_DIRECT, STGM_DIRECT_SWMR,
STGM_FAILIFTHERE, STGM_NOSCRATCH, STGM_NOSNAPSHOT, STGM_PRIORITY, STGM_READ, STGM_READWRITE,
STGM_SHARE_DENY_NONE, STGM_SHARE_DENY_READ, STGM_SHARE_DENY_WRITE, STGM_SHARE_EXCLUSIVE,
STGM_TRANSACTED, STGM_WRITE,
};
use windows::{core::HSTRING, Win32::System::Com::IPersistFile};
pub struct PersistFile(IPersistFile);
impl PersistFile {
#[allow(dead_code)]
pub(crate) fn from_raw(raw: IPersistFile) -> Self {
Self(raw)
}
pub fn get_cur_file(&self) -> Option<String> {
unsafe {
if let Ok(f) = self.0.GetCurFile() {
return match f.to_string() {
Ok(s) => Some(s.clone()),
Err(_) => None,
};
}
}
None
}
pub fn is_dirty(&self) -> bool {
unsafe { self.0.IsDirty() }.is_ok()
}
pub fn load(&self, filename: String, mode: STGM) {
unsafe { self.0.Load(&HSTRING::from(filename), mode) }.unwrap_or(())
}
pub fn save(&self, filename: Option<String>, remember: bool) {
unsafe {
match filename {
None => self.0.Save(None, remember),
Some(f) => self.0.Save(&HSTRING::from(f), remember),
}
}
.unwrap_or(());
}
pub fn save_completed(&self, filename: String) {
unsafe { self.0.SaveCompleted(&HSTRING::from(filename)) }.unwrap_or(())
}
}
impl Debug for PersistFile {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "PersistFile()")
}
}