mirror of
https://github.com/veeso/termscp.git
synced 2025-12-07 09:36:00 -08:00
remotefs 0.2.0
This commit is contained in:
committed by
Christian Visintin
parent
edd0842273
commit
ec4daf8e25
@@ -27,7 +27,7 @@
|
||||
*/
|
||||
// locals
|
||||
use super::{
|
||||
Entry, FileTransferActivity, LogLevel, Msg, PendingActionMsg, SelectedEntry, TransferOpts,
|
||||
File, FileTransferActivity, LogLevel, Msg, PendingActionMsg, SelectedFile, TransferOpts,
|
||||
TransferPayload,
|
||||
};
|
||||
use std::path::{Path, PathBuf};
|
||||
@@ -52,19 +52,18 @@ impl FileTransferActivity {
|
||||
fn local_send_file(&mut self, opts: TransferOpts) {
|
||||
let wrkdir: PathBuf = self.remote().wrkdir.clone();
|
||||
match self.get_local_selected_entries() {
|
||||
SelectedEntry::One(entry) => {
|
||||
SelectedFile::One(entry) => {
|
||||
let file_to_check = Self::file_to_check(&entry, opts.save_as.as_ref());
|
||||
if self.config().get_prompt_on_file_replace()
|
||||
&& self.remote_file_exists(file_to_check.as_path())
|
||||
&& !self.should_replace_file(
|
||||
opts.save_as.as_deref().unwrap_or_else(|| entry.name()),
|
||||
)
|
||||
&& !self
|
||||
.should_replace_file(opts.save_as.clone().unwrap_or_else(|| entry.name()))
|
||||
{
|
||||
// Do not replace
|
||||
return;
|
||||
}
|
||||
if let Err(err) = self.filetransfer_send(
|
||||
TransferPayload::Any(entry.clone()),
|
||||
TransferPayload::Any(entry),
|
||||
wrkdir.as_path(),
|
||||
opts.save_as,
|
||||
) {
|
||||
@@ -76,7 +75,7 @@ impl FileTransferActivity {
|
||||
}
|
||||
}
|
||||
}
|
||||
SelectedEntry::Many(entries) => {
|
||||
SelectedFile::Many(entries) => {
|
||||
// In case of selection: save multiple files in wrkdir/input
|
||||
let mut dest_path: PathBuf = wrkdir;
|
||||
if let Some(save_as) = opts.save_as {
|
||||
@@ -85,7 +84,7 @@ impl FileTransferActivity {
|
||||
// Iter files
|
||||
if self.config().get_prompt_on_file_replace() {
|
||||
// Check which file would be replaced
|
||||
let existing_files: Vec<&Entry> = entries
|
||||
let existing_files: Vec<&File> = entries
|
||||
.iter()
|
||||
.filter(|x| {
|
||||
self.remote_file_exists(
|
||||
@@ -111,25 +110,24 @@ impl FileTransferActivity {
|
||||
}
|
||||
}
|
||||
}
|
||||
SelectedEntry::None => {}
|
||||
SelectedFile::None => {}
|
||||
}
|
||||
}
|
||||
|
||||
fn remote_recv_file(&mut self, opts: TransferOpts) {
|
||||
let wrkdir: PathBuf = self.local().wrkdir.clone();
|
||||
match self.get_remote_selected_entries() {
|
||||
SelectedEntry::One(entry) => {
|
||||
SelectedFile::One(entry) => {
|
||||
let file_to_check = Self::file_to_check(&entry, opts.save_as.as_ref());
|
||||
if self.config().get_prompt_on_file_replace()
|
||||
&& self.local_file_exists(file_to_check.as_path())
|
||||
&& !self.should_replace_file(
|
||||
opts.save_as.as_deref().unwrap_or_else(|| entry.name()),
|
||||
)
|
||||
&& !self
|
||||
.should_replace_file(opts.save_as.clone().unwrap_or_else(|| entry.name()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
if let Err(err) = self.filetransfer_recv(
|
||||
TransferPayload::Any(entry.clone()),
|
||||
TransferPayload::Any(entry),
|
||||
wrkdir.as_path(),
|
||||
opts.save_as,
|
||||
) {
|
||||
@@ -141,7 +139,7 @@ impl FileTransferActivity {
|
||||
}
|
||||
}
|
||||
}
|
||||
SelectedEntry::Many(entries) => {
|
||||
SelectedFile::Many(entries) => {
|
||||
// In case of selection: save multiple files in wrkdir/input
|
||||
let mut dest_path: PathBuf = wrkdir;
|
||||
if let Some(save_as) = opts.save_as {
|
||||
@@ -150,7 +148,7 @@ impl FileTransferActivity {
|
||||
// Iter files
|
||||
if self.config().get_prompt_on_file_replace() {
|
||||
// Check which file would be replaced
|
||||
let existing_files: Vec<&Entry> = entries
|
||||
let existing_files: Vec<&File> = entries
|
||||
.iter()
|
||||
.filter(|x| {
|
||||
self.local_file_exists(
|
||||
@@ -176,13 +174,13 @@ impl FileTransferActivity {
|
||||
}
|
||||
}
|
||||
}
|
||||
SelectedEntry::None => {}
|
||||
SelectedFile::None => {}
|
||||
}
|
||||
}
|
||||
|
||||
/// Set pending transfer into storage
|
||||
pub(crate) fn should_replace_file(&mut self, file_name: &str) -> bool {
|
||||
self.mount_radio_replace(file_name);
|
||||
pub(crate) fn should_replace_file(&mut self, file_name: String) -> bool {
|
||||
self.mount_radio_replace(&file_name);
|
||||
// Wait for answer
|
||||
trace!("Asking user whether he wants to replace file {}", file_name);
|
||||
if self.wait_for_pending_msg(&[
|
||||
@@ -201,8 +199,8 @@ impl FileTransferActivity {
|
||||
}
|
||||
|
||||
/// Set pending transfer for many files into storage and mount radio
|
||||
pub(crate) fn should_replace_files(&mut self, files: Vec<&Entry>) -> bool {
|
||||
let file_names: Vec<&str> = files.iter().map(|x| x.name()).collect();
|
||||
pub(crate) fn should_replace_files(&mut self, files: Vec<&File>) -> bool {
|
||||
let file_names: Vec<String> = files.iter().map(|x| x.name()).collect();
|
||||
self.mount_radio_replace_many(file_names.as_slice());
|
||||
// Wait for answer
|
||||
trace!(
|
||||
@@ -225,14 +223,14 @@ impl FileTransferActivity {
|
||||
}
|
||||
|
||||
/// Get file to check for path
|
||||
pub(crate) fn file_to_check(e: &Entry, alt: Option<&String>) -> PathBuf {
|
||||
pub(crate) fn file_to_check(e: &File, alt: Option<&String>) -> PathBuf {
|
||||
match alt {
|
||||
Some(s) => PathBuf::from(s),
|
||||
None => PathBuf::from(e.name()),
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn file_to_check_many(e: &Entry, wrkdir: &Path) -> PathBuf {
|
||||
pub(crate) fn file_to_check_many(e: &File, wrkdir: &Path) -> PathBuf {
|
||||
let mut p = wrkdir.to_path_buf();
|
||||
p.push(e.name());
|
||||
p
|
||||
|
||||
Reference in New Issue
Block a user