Option: prompt user when about to replace an existing file caused by a file transfer

This commit is contained in:
veeso
2021-09-19 11:18:52 +02:00
parent 63e7023342
commit 06ffbaa2f4
17 changed files with 406 additions and 33 deletions
+27 -7
View File
@@ -27,7 +27,9 @@
*/
// locals
use super::super::browser::FileExplorerTab;
use super::{FileTransferActivity, FsEntry, LogLevel, SelectedEntry, TransferPayload};
use super::{
FileTransferActivity, FsEntry, LogLevel, SelectedEntry, TransferOpts, TransferPayload,
};
use std::path::PathBuf;
@@ -69,7 +71,7 @@ impl FileTransferActivity {
}
}
pub(crate) fn action_find_transfer(&mut self, save_as: Option<String>) {
pub(crate) fn action_find_transfer(&mut self, opts: TransferOpts) {
let wrkdir: PathBuf = match self.browser.tab() {
FileExplorerTab::FindLocal | FileExplorerTab::Local => self.remote().wrkdir.clone(),
FileExplorerTab::FindRemote | FileExplorerTab::Remote => self.local().wrkdir.clone(),
@@ -77,10 +79,19 @@ impl FileTransferActivity {
match self.get_found_selected_entries() {
SelectedEntry::One(entry) => match self.browser.tab() {
FileExplorerTab::FindLocal | FileExplorerTab::Local => {
if let Err(err) = self.filetransfer_send(
let file_to_check = Self::file_to_check(&entry, opts.save_as.as_ref());
if opts.check_replace
&& self.config().get_prompt_on_file_replace()
&& self.remote_file_exists(file_to_check.as_path())
{
// Save pending transfer
self.set_pending_transfer(
opts.save_as.as_deref().unwrap_or_else(|| entry.get_name()),
);
} else if let Err(err) = self.filetransfer_send(
TransferPayload::Any(entry.get_realfile()),
wrkdir.as_path(),
save_as,
opts.save_as,
) {
self.log_and_alert(
LogLevel::Error,
@@ -90,10 +101,19 @@ impl FileTransferActivity {
}
}
FileExplorerTab::FindRemote | FileExplorerTab::Remote => {
if let Err(err) = self.filetransfer_recv(
let file_to_check = Self::file_to_check(&entry, opts.save_as.as_ref());
if opts.check_replace
&& self.config().get_prompt_on_file_replace()
&& self.local_file_exists(file_to_check.as_path())
{
// Save pending transfer
self.set_pending_transfer(
opts.save_as.as_deref().unwrap_or_else(|| entry.get_name()),
);
} else if let Err(err) = self.filetransfer_recv(
TransferPayload::Any(entry.get_realfile()),
wrkdir.as_path(),
save_as,
opts.save_as,
) {
self.log_and_alert(
LogLevel::Error,
@@ -106,7 +126,7 @@ impl FileTransferActivity {
SelectedEntry::Many(entries) => {
// In case of selection: save multiple files in wrkdir/input
let mut dest_path: PathBuf = wrkdir;
if let Some(save_as) = save_as {
if let Some(save_as) = opts.save_as {
dest_path.push(save_as);
}
// Iter files