Fix broken pd file will cause PdFile::open failed

This commit is contained in:
2022-06-14 10:05:14 +00:00
committed by GitHub
parent c79ad83404
commit 5e60a941a4
2 changed files with 30 additions and 4 deletions

View File

@@ -556,6 +556,17 @@ async fn test_downloader() {
}
let url = "https://i.pximg.net/img-original/img/2022/06/12/23/49/43/99014872_p0.png";
let pb = p.join("99014872_p0.png");
{
let mut file_name = pb.file_name().unwrap().to_owned();
file_name.push(".pd");
let mut pdf = pb.clone();
pdf.set_file_name(file_name);
if pdf.exists() {
remove_file(&pdf).unwrap();
}
LocalFile::create(&pdf).unwrap();
assert!(pdf.exists());
}
let downloader = Downloader::<LocalFile>::new(
url,
json::object! {"referer": "https://www.pixiv.net/"},

View File

@@ -229,11 +229,26 @@ impl PdFile {
pb.set_file_name(&file_name);
if p.exists() {
if pb.exists() {
let f = Self::read_from_file(p)?;
if f.is_completed() {
return Ok(PdFileResult::TargetExisted);
match Self::read_from_file(p) {
Ok(f) => {
if f.is_completed() {
return Ok(PdFileResult::TargetExisted);
}
Ok(PdFileResult::ExistedOk(f))
}
Err(_) => {
remove_file(p)?;
let f = PdFile::new();
f.open_with_create_file(&pb)?;
f.set_file_name(
p.file_name()
.try_err(gettext("Path need have a file name."))?
.to_str()
.unwrap_or("(null)"),
)?;
Ok(PdFileResult::Ok(f))
}
}
Ok(PdFileResult::ExistedOk(f))
} else {
Ok(PdFileResult::TargetExisted)
}