mirror of
https://github.com/PR0M3TH3AN/Marlin.git
synced 2025-09-08 07:08:44 +00:00
Fix modification time fallback for backups
This commit is contained in:
@@ -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,
|
||||||
|
Reference in New Issue
Block a user