Skip to content

Commit bf06cb6

Browse files
committed
fix: delete incorrect dir on import respack failure
1 parent 15903cd commit bf06cb6

1 file changed

Lines changed: 10 additions & 7 deletions

File tree

phira/src/scene/main.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ impl Scene for MainScene {
417417
"_import_respack" => {
418418
let root = dir::respacks()?;
419419
let dir = prpr::dir::Dir::new(&root)?;
420-
let mut dir_id = String::new();
420+
let mut dir_id: Option<String> = None;
421421
let item: Result<ResPackItem> = (|| {
422422
let config = {
423423
let mut zip = zip::ZipArchive::new(BufReader::new(File::open(&file)?))?;
@@ -462,17 +462,20 @@ impl Scene for MainScene {
462462
while dir.exists(uuid.to_string())? {
463463
uuid = Uuid::new_v4();
464464
}
465-
dir_id = uuid.to_string();
466-
dir.create_dir_all(&dir_id)?;
467-
let dir = dir.open_dir(&dir_id)?;
465+
let id = uuid.to_string();
466+
dir_id = Some(id.clone());
467+
dir.create_dir_all(&id)?;
468+
let dir = dir.open_dir(&id)?;
468469
unzip_into(BufReader::new(File::open(file)?), &dir, false).context("failed to unzip")?;
469-
get_data_mut().respacks.push(dir_id.clone());
470+
get_data_mut().respacks.push(id.clone());
470471
save_data()?;
471-
Ok(ResPackItem::new(Some(format!("{root}/{dir_id}").into()), config.name))
472+
Ok(ResPackItem::new(Some(format!("{root}/{id}").into()), config.name))
472473
})();
473474
match item {
474475
Err(err) => {
475-
dir.remove_dir_all(&dir_id)?;
476+
if let Some(id) = &dir_id {
477+
dir.remove_dir_all(id)?;
478+
}
476479
show_error(err.context(itl!("import-respack-failed")));
477480
}
478481
Ok(item) => {

0 commit comments

Comments
 (0)