don't throw an error when a file is greater than MAXPATH

https://anki.tenderapp.com/discussions/ankidesktop/40931-check-media-error
This commit is contained in:
Damien Elmes 2020-04-30 08:01:45 +10:00
parent 4e33775ed4
commit 18a6218a77

View file

@ -235,36 +235,36 @@ where
continue; continue;
} }
// rename if required if let Some(norm_name) = filename_if_normalized(disk_fname) {
let (norm_name, renamed_on_disk) = self.normalize_and_maybe_rename(ctx, &disk_fname)?; out.files.push(norm_name.into_owned());
if renamed_on_disk { } else {
match data_for_file(&self.mgr.media_folder, disk_fname)? {
Some(data) => {
let norm_name = self.normalize_file(ctx, &disk_fname, data)?;
out.renamed out.renamed
.insert(disk_fname.to_string(), norm_name.to_string()); .insert(disk_fname.to_string(), norm_name.to_string());
}
out.files.push(norm_name.into_owned()); out.files.push(norm_name.into_owned());
} }
None => {
// file not found, caused by the file being removed at this exact instant,
// or the path being larger than MAXPATH on Windows
continue;
}
};
}
}
Ok(out) Ok(out)
} }
/// Returns (normalized_form, needs_rename) /// Write file data to normalized location, moving old file to trash.
fn normalize_and_maybe_rename<'a>( fn normalize_file<'a>(
&mut self, &mut self,
ctx: &mut MediaDatabaseContext, ctx: &mut MediaDatabaseContext,
disk_fname: &'a str, disk_fname: &'a str,
) -> Result<(Cow<'a, str>, bool)> { data: Vec<u8>,
// already normalized? ) -> Result<Cow<'a, str>> {
if let Some(fname) = filename_if_normalized(disk_fname) {
return Ok((fname, false));
}
// add a copy of the file using the correct name // add a copy of the file using the correct name
let data = data_for_file(&self.mgr.media_folder, disk_fname)?.ok_or_else(|| {
AnkiError::IOError {
info: format!("file disappeared: {}", disk_fname),
}
})?;
let fname = self.mgr.add_file(ctx, disk_fname, &data)?; let fname = self.mgr.add_file(ctx, disk_fname, &data)?;
debug!(self.ctx.log, "renamed"; "from"=>disk_fname, "to"=>&fname.as_ref()); debug!(self.ctx.log, "renamed"; "from"=>disk_fname, "to"=>&fname.as_ref());
assert_ne!(fname.as_ref(), disk_fname); assert_ne!(fname.as_ref(), disk_fname);
@ -273,7 +273,7 @@ where
let path = &self.mgr.media_folder.join(disk_fname); let path = &self.mgr.media_folder.join(disk_fname);
fs::remove_file(path)?; fs::remove_file(path)?;
Ok((fname, true)) Ok(fname)
} }
fn fire_progress_cb(&mut self) -> Result<()> { fn fire_progress_cb(&mut self) -> Result<()> {