Fix modification time fallback for backups

This commit is contained in:
thePR0M3TH3AN
2025-05-21 14:31:04 -04:00
parent b7b53d1ad6
commit c43e5993df

View File

@@ -136,50 +136,42 @@ impl BackupManager {
if let Some(filename_osstr) = path.file_name() { if let Some(filename_osstr) = path.file_name() {
if let Some(filename) = filename_osstr.to_str() { if let Some(filename) = filename_osstr.to_str() {
if filename.starts_with("backup_") && filename.ends_with(".db") { if filename.starts_with("backup_") && filename.ends_with(".db") {
let metadata = fs::metadata(&path).with_context(|| {
format!("Failed to get metadata for {}", path.display())
})?;
let ts_str = filename let ts_str = filename
.trim_start_matches("backup_") .trim_start_matches("backup_")
.trim_end_matches(".db"); .trim_end_matches(".db");
let naive_dt = let parsed_dt =
match NaiveDateTime::parse_from_str(ts_str, "%Y-%m-%d_%H-%M-%S_%f") NaiveDateTime::parse_from_str(ts_str, "%Y-%m-%d_%H-%M-%S_%f")
{ .or_else(|_| {
Ok(dt) => dt, NaiveDateTime::parse_from_str(ts_str, "%Y-%m-%d_%H-%M-%S")
Err(_) => match NaiveDateTime::parse_from_str( });
ts_str,
"%Y-%m-%d_%H-%M-%S", let timestamp_utc = match parsed_dt {
) { Ok(naive_dt) => {
Ok(dt) => dt, let local_dt_result = Local.from_local_datetime(&naive_dt);
Err(_) => { let local_dt = match local_dt_result {
let metadata = chrono::LocalResult::Single(dt) => dt,
fs::metadata(&path).with_context(|| { chrono::LocalResult::Ambiguous(dt1, _dt2) => {
format!( eprintln!("Warning: Ambiguous local time for backup {}, taking first interpretation.", filename);
"Failed to get metadata for {}", dt1
path.display()
)
})?;
DateTime::<Utc>::from(metadata.modified()?).naive_utc()
} }
}, chrono::LocalResult::None => {
}; eprintln!(
"Warning: Invalid local time for backup {}, skipping.",
let local_dt_result = Local.from_local_datetime(&naive_dt); filename
let local_dt = match local_dt_result { );
chrono::LocalResult::Single(dt) => dt, continue;
chrono::LocalResult::Ambiguous(dt1, _dt2) => { }
eprintln!("Warning: Ambiguous local time for backup {}, taking first interpretation.", filename); };
dt1 DateTime::<Utc>::from(local_dt)
}
chrono::LocalResult::None => {
eprintln!(
"Warning: Invalid local time for backup {}, skipping.",
filename
);
continue;
} }
Err(_) => DateTime::<Utc>::from(metadata.modified()?),
}; };
let timestamp_utc = DateTime::<Utc>::from(local_dt);
let metadata = fs::metadata(&path)?;
backup_infos.push(BackupInfo { backup_infos.push(BackupInfo {
id: filename.to_string(), id: filename.to_string(),
timestamp: timestamp_utc, timestamp: timestamp_utc,