mirror of
https://github.com/veeso/termscp.git
synced 2025-12-07 09:36:00 -08:00
Improved sftp and I/O in general: set buffer size to 65536
This commit is contained in:
@@ -522,7 +522,7 @@ impl FileTransfer for SftpFileTransfer {
|
|||||||
mode,
|
mode,
|
||||||
OpenType::File,
|
OpenType::File,
|
||||||
) {
|
) {
|
||||||
Ok(file) => Ok(Box::new(BufWriter::with_capacity(8192, file))),
|
Ok(file) => Ok(Box::new(BufWriter::with_capacity(65536, file))),
|
||||||
Err(err) => Err(FileTransferError::new_ex(
|
Err(err) => Err(FileTransferError::new_ex(
|
||||||
FileTransferErrorType::FileCreateDenied,
|
FileTransferErrorType::FileCreateDenied,
|
||||||
format!("{}", err),
|
format!("{}", err),
|
||||||
|
|||||||
@@ -158,20 +158,27 @@ impl FileTransferActivity {
|
|||||||
// Set started time
|
// Set started time
|
||||||
self.transfer_started = Instant::now();
|
self.transfer_started = Instant::now();
|
||||||
let mut last_progress_val: f64 = 0.0;
|
let mut last_progress_val: f64 = 0.0;
|
||||||
loop {
|
while total_bytes_written < file_size {
|
||||||
// Read till you can
|
// Read till you can
|
||||||
let mut buffer: [u8; 8192] = [0; 8192];
|
let mut buffer: [u8; 65536] = [0; 65536];
|
||||||
match fhnd.read(&mut buffer) {
|
match fhnd.read(&mut buffer) {
|
||||||
Ok(bytes_read) => {
|
Ok(bytes_read) => {
|
||||||
total_bytes_written += bytes_read;
|
total_bytes_written += bytes_read;
|
||||||
if bytes_read == 0 {
|
if bytes_read == 0 {
|
||||||
break;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
|
let mut buf_start: usize = 0;
|
||||||
|
while buf_start < bytes_read {
|
||||||
// Write bytes
|
// Write bytes
|
||||||
if let Err(err) = rhnd.write(&buffer[0..bytes_read]) {
|
match rhnd.write(&buffer[buf_start..bytes_read]) {
|
||||||
|
Ok(bytes) => buf_start += bytes,
|
||||||
|
Err(err) => {
|
||||||
self.log(
|
self.log(
|
||||||
LogLevel::Error,
|
LogLevel::Error,
|
||||||
format!("Could not write remote file: {}", err)
|
format!(
|
||||||
|
"Could not write remote file: {}",
|
||||||
|
err
|
||||||
|
)
|
||||||
.as_ref(),
|
.as_ref(),
|
||||||
);
|
);
|
||||||
self.input_mode =
|
self.input_mode =
|
||||||
@@ -182,6 +189,9 @@ impl FileTransferActivity {
|
|||||||
err
|
err
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -338,7 +348,9 @@ impl FileTransferActivity {
|
|||||||
// Eventually, Reset input mode to explorer (if input mode is wait or progress)
|
// Eventually, Reset input mode to explorer (if input mode is wait or progress)
|
||||||
if let InputMode::Popup(ptype) = &self.input_mode {
|
if let InputMode::Popup(ptype) = &self.input_mode {
|
||||||
match ptype {
|
match ptype {
|
||||||
PopupType::Wait(_) | PopupType::Progress(_) => self.input_mode = InputMode::Explorer,
|
PopupType::Wait(_) | PopupType::Progress(_) => {
|
||||||
|
self.input_mode = InputMode::Explorer
|
||||||
|
}
|
||||||
_ => { /* Nothing to do */ }
|
_ => { /* Nothing to do */ }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -396,19 +408,23 @@ impl FileTransferActivity {
|
|||||||
self.transfer_started = Instant::now();
|
self.transfer_started = Instant::now();
|
||||||
// Write local file
|
// Write local file
|
||||||
let mut last_progress_val: f64 = 0.0;
|
let mut last_progress_val: f64 = 0.0;
|
||||||
loop {
|
while total_bytes_written < file.size {
|
||||||
// Read till you can
|
// Read till you can
|
||||||
let mut buffer: [u8; 8192] = [0; 8192];
|
let mut buffer: [u8; 8192] = [0; 8192];
|
||||||
match rhnd.read(&mut buffer) {
|
match rhnd.read(&mut buffer) {
|
||||||
Ok(bytes_read) => {
|
Ok(bytes_read) => {
|
||||||
total_bytes_written += bytes_read;
|
total_bytes_written += bytes_read;
|
||||||
if bytes_read == 0 {
|
if bytes_read == 0 {
|
||||||
break;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
|
let mut buf_start: usize = 0;
|
||||||
|
while buf_start < bytes_read {
|
||||||
// Write bytes
|
// Write bytes
|
||||||
if let Err(err) =
|
match local_file
|
||||||
local_file.write(&buffer[0..bytes_read])
|
.write(&buffer[buf_start..bytes_read])
|
||||||
{
|
{
|
||||||
|
Ok(bytes) => buf_start += bytes,
|
||||||
|
Err(err) => {
|
||||||
self.log(
|
self.log(
|
||||||
LogLevel::Error,
|
LogLevel::Error,
|
||||||
format!(
|
format!(
|
||||||
@@ -428,6 +444,8 @@ impl FileTransferActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
self.log(
|
self.log(
|
||||||
LogLevel::Error,
|
LogLevel::Error,
|
||||||
@@ -595,7 +613,7 @@ impl FileTransferActivity {
|
|||||||
None => match self.local.files.len() {
|
None => match self.local.files.len() {
|
||||||
0 => 0,
|
0 => 0,
|
||||||
_ => self.local.files.len() - 1,
|
_ => self.local.files.len() - 1,
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
// Sort files
|
// Sort files
|
||||||
self.local.sort_files_by_name();
|
self.local.sort_files_by_name();
|
||||||
@@ -626,7 +644,7 @@ impl FileTransferActivity {
|
|||||||
None => match self.remote.files.len() {
|
None => match self.remote.files.len() {
|
||||||
0 => 0,
|
0 => 0,
|
||||||
_ => self.remote.files.len() - 1,
|
_ => self.remote.files.len() - 1,
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
// Sort files
|
// Sort files
|
||||||
self.remote.sort_files_by_name();
|
self.remote.sort_files_by_name();
|
||||||
|
|||||||
Reference in New Issue
Block a user