summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiayi Zhao <jeff.no.zhao@gmail.com>2019-06-30 12:44:02 -0400
committerJiayi Zhao <jeff.no.zhao@gmail.com>2019-06-30 12:44:02 -0400
commitb9a3d876d046c3920ee63c6454fc43a5b9158f35 (patch)
tree81288f98b94b953806080239f6bbc6cd6d3b184a
parent242bae74d7b97e4542afbd9b1c708b45919e9695 (diff)
use mv for bulk renaming files
-rw-r--r--src/commands/bulk_rename.rs31
1 files changed, 26 insertions, 5 deletions
diff --git a/src/commands/bulk_rename.rs b/src/commands/bulk_rename.rs
index 2db758f..1c7ab46 100644
--- a/src/commands/bulk_rename.rs
+++ b/src/commands/bulk_rename.rs
@@ -30,20 +30,20 @@ impl BulkRename {
)),
};
- let curr_tab = &context.tabs[context.curr_tab_index];
-
- let paths = curr_tab.curr_list.get_selected_paths();
+ /* generate a random file name to write to */
let mut rand_str = String::with_capacity(PREFIX.len() + 10);
rand_str.push_str(PREFIX);
-
rand::thread_rng()
.sample_iter(&rand::distributions::Alphanumeric)
.take(10)
.for_each(|ch| rand_str.push(ch));
+ /* create this file in a temporary folder */
let mut file_path = path::PathBuf::from("/tmp");
file_path.push(rand_str);
+ let curr_tab = &context.tabs[context.curr_tab_index];
+ let paths = curr_tab.curr_list.get_selected_paths();
{
let mut file = std::fs::File::create(&file_path)?;
for path in &paths {
@@ -57,6 +57,7 @@ impl BulkRename {
let mut command = process::Command::new(editor);
command.arg(&file_path);
+ let time = std::time::SystemTime::now();
/* exit curses and launch program */
{
ncurses::savetty();
@@ -64,6 +65,10 @@ impl BulkRename {
let mut handle = command.spawn()?;
handle.wait()?;
}
+ let metadata = std::fs::metadata(&file_path)?;
+ if time >= metadata.modified()? {
+ return Ok(());
+ }
let mut paths_renamed: Vec<path::PathBuf> = Vec::with_capacity(paths.len());
{
@@ -80,6 +85,12 @@ impl BulkRename {
paths_renamed.push(path);
}
}
+ if paths_renamed.len() < paths.len() {
+ return Err(JoshutoError::new(
+ JoshutoErrorKind::IOInvalidInput,
+ String::from("Not enough input given"),
+ ));
+ }
for (p, q) in paths.iter().zip(paths_renamed.iter()) {
println!("{:?} -> {:?}", p, q);
@@ -94,9 +105,19 @@ impl BulkRename {
let user_input_trimmed = user_input.trim();
if user_input_trimmed == "y" || user_input_trimmed == "yes" {
for (p, q) in paths.iter().zip(paths_renamed.iter()) {
- std::fs::rename(p, q)?;
+ let mut command = process::Command::new("mv");
+ command.arg("-iv");
+ command.arg("--");
+ command.arg(p);
+ command.arg(q);
+ let mut handle = command.spawn()?;
+ handle.wait()?;
}
}
+ print!("Press ENTER to continue");
+ std::io::stdout().flush()?;
+ std::io::stdin().read_line(&mut user_input)?;
+
std::fs::remove_file(file_path)?;
/* restore ncurses */