1 // Take a look at the license at the top of the repository in the LICENSE file. 2 3 use crate::FileInfo; 4 use glib::translate::*; 5 use std::mem; 6 use std::time::{Duration, SystemTime}; 7 8 impl FileInfo { 9 #[cfg_attr(feature = "v2_62", deprecated)] 10 #[doc(alias = "g_file_info_get_modification_time")] 11 #[doc(alias = "get_modification_time")] modification_time(&self) -> SystemTime12 pub fn modification_time(&self) -> SystemTime { 13 unsafe { 14 let mut result = mem::MaybeUninit::uninit(); 15 ffi::g_file_info_get_modification_time(self.to_glib_none().0, result.as_mut_ptr()); 16 let result = result.assume_init(); 17 18 if result.tv_sec > 0 { 19 let duration = Duration::from_secs(result.tv_sec as u64) 20 + Duration::from_millis(result.tv_usec as u64); 21 SystemTime::UNIX_EPOCH + duration 22 } else { 23 let duration = Duration::from_secs((-result.tv_sec) as u64) 24 + Duration::from_millis(result.tv_usec as u64); 25 SystemTime::UNIX_EPOCH - duration 26 } 27 } 28 } 29 30 #[cfg_attr(feature = "v2_62", deprecated)] 31 #[doc(alias = "g_file_info_set_modification_time")] set_modification_time(&self, mtime: SystemTime)32 pub fn set_modification_time(&self, mtime: SystemTime) { 33 let diff = mtime 34 .duration_since(SystemTime::UNIX_EPOCH) 35 .expect("failed to convert time"); 36 unsafe { 37 ffi::g_file_info_set_modification_time( 38 self.to_glib_none().0, 39 mut_override(&glib::ffi::GTimeVal { 40 tv_sec: diff.as_secs() as _, 41 tv_usec: diff.subsec_micros() as _, 42 }), 43 ); 44 } 45 } 46 } 47