diff --git a/src/downloader/downloader.rs b/src/downloader/downloader.rs index c569161..3fd15fb 100644 --- a/src/downloader/downloader.rs +++ b/src/downloader/downloader.rs @@ -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::::new( url, json::object! {"referer": "https://www.pixiv.net/"}, diff --git a/src/downloader/pd_file/file.rs b/src/downloader/pd_file/file.rs index 53918b4..83ff728 100644 --- a/src/downloader/pd_file/file.rs +++ b/src/downloader/pd_file/file.rs @@ -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) }