From 1757eb5beced43b6d173f065bf1c4befb387dc55 Mon Sep 17 00:00:00 2001 From: veeso Date: Tue, 10 Aug 2021 22:17:36 +0200 Subject: [PATCH] When uploading a directory, create directory only if it doesn't exist --- CHANGELOG.md | 10 ++++ src/ui/activities/filetransfer/session.rs | 69 +++++++++++------------ 2 files changed, 44 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0322f00..0ffd096 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog - [Changelog](#changelog) + - [0.7.0](#070) - [0.6.0](#060) - [0.5.1](#051) - [0.5.0](#050) @@ -19,6 +20,15 @@ --- +## 0.7.0 + +Released on ?? + +> 🍁 Autumn update 2021 🍇 + +- Bugfix: + - Fixed [Issue 58](https://github.com/veeso/termscp/issues/58):When uploading a directory, create directory only if it doesn't exist + ## 0.6.0 Released on 23/07/2021 diff --git a/src/ui/activities/filetransfer/session.rs b/src/ui/activities/filetransfer/session.rs index 9ea0b12..d4e6049 100644 --- a/src/ui/activities/filetransfer/session.rs +++ b/src/ui/activities/filetransfer/session.rs @@ -363,48 +363,47 @@ impl FileTransferActivity { } } FsEntry::Directory(dir) => { - // Create directory on remote - match self.client.mkdir(remote_path.as_path()) { - Ok(_) => { - self.log( - LogLevel::Info, - format!("Created directory \"{}\"", remote_path.display()), - ); - // Get files in dir - match self.host.scan_dir(dir.abs_path.as_path()) { - Ok(entries) => { - // Iterate over files - for entry in entries.iter() { - // If aborted; break - if self.transfer.aborted() { - break; - } - // Send entry; name is always None after first call - self.filetransfer_send_recurse( - &entry, - remote_path.as_path(), - None, - ); - } - } - Err(err) => { - self.log_and_alert( - LogLevel::Error, - format!( - "Could not scan directory \"{}\": {}", - dir.abs_path.display(), - err - ), - ); + // Check whether should create directory + if self.client.list_dir(remote_path.as_path()).is_err() { + match self.client.mkdir(remote_path.as_path()) { + Ok(_) => { + self.log( + LogLevel::Info, + format!("Created directory \"{}\"", remote_path.display()), + ); + } + Err(err) => { + self.log_and_alert( + LogLevel::Error, + format!( + "Failed to create directory \"{}\": {}", + remote_path.display(), + err + ), + ); + return; + } + } + } + // Get files in dir + match self.host.scan_dir(dir.abs_path.as_path()) { + Ok(entries) => { + // Iterate over files + for entry in entries.iter() { + // If aborted; break + if self.transfer.aborted() { + break; } + // Send entry; name is always None after first call + self.filetransfer_send_recurse(&entry, remote_path.as_path(), None); } } Err(err) => { self.log_and_alert( LogLevel::Error, format!( - "Failed to create directory \"{}\": {}", - remote_path.display(), + "Could not scan directory \"{}\": {}", + dir.abs_path.display(), err ), );