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