From 03d6fc1e605920f870ebc4e3dc721d27163edd4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Rodrigues=20Miguel?= Date: Sun, 28 Mar 2021 14:28:07 -0300 Subject: [PATCH] decompressors/tar: Add confirmation dialog for file overwriting --- src/decompressors/tar.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/decompressors/tar.rs b/src/decompressors/tar.rs index a613b0c..c384ada 100644 --- a/src/decompressors/tar.rs +++ b/src/decompressors/tar.rs @@ -8,7 +8,7 @@ use colored::Colorize; use tar::{self, Archive}; use super::decompressor::{DecompressionResult, Decompressor}; -use crate::{file::File, utils}; +use crate::{file::File, utils, dialogs::Confirmation}; #[derive(Debug)] pub struct TarDecompressor {} @@ -21,6 +21,7 @@ impl TarDecompressor { &from.path ); let mut files_unpacked = vec![]; + let confirm = Confirmation::new("Do you want to overwrite 'FILE'?", Some("FILE")); let mut archive: Archive> = match from.contents_in_memory { Some(bytes) => tar::Archive::new(Box::new(Cursor::new(bytes))), @@ -32,8 +33,15 @@ impl TarDecompressor { for file in archive.entries()? { let mut file = file?; - - // TODO: check if file/folder already exists and ask user's permission for overwriting + + let file_path = PathBuf::from(into).join(file.path()?); + if file_path.exists() { + let file_path_str = &*file_path.to_string_lossy(); + if confirm.ask(Some(file_path_str))? { + continue; + } + } + file.unpack_in(into)?; println!(