mirror of
https://github.com/ankitects/anki.git
synced 2025-09-21 15:32:23 -04:00
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:
parent
4e33775ed4
commit
18a6218a77
1 changed files with 21 additions and 21 deletions
|
@ -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 {
|
||||||
out.renamed
|
match data_for_file(&self.mgr.media_folder, disk_fname)? {
|
||||||
.insert(disk_fname.to_string(), norm_name.to_string());
|
Some(data) => {
|
||||||
|
let norm_name = self.normalize_file(ctx, &disk_fname, data)?;
|
||||||
|
out.renamed
|
||||||
|
.insert(disk_fname.to_string(), norm_name.to_string());
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
out.files.push(norm_name.into_owned());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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<()> {
|
||||||
|
|
Loading…
Reference in a new issue