From 50dc2a4d73cb300d0994dd9cd64ca017e108383c Mon Sep 17 00:00:00 2001 From: csf Date: Wed, 16 Nov 2022 18:53:32 +0900 Subject: [PATCH 1/2] fix: sending file from local to remote (keep send_raw) --- libs/hbb_common/src/fs.rs | 15 +++++---------- src/client/io_loop.rs | 2 +- src/server/connection.rs | 3 ++- src/ui_cm_interface.rs | 32 ++++++++++++++++++-------------- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/libs/hbb_common/src/fs.rs b/libs/hbb_common/src/fs.rs index 6cc795a0d..dd8a7530e 100644 --- a/libs/hbb_common/src/fs.rs +++ b/libs/hbb_common/src/fs.rs @@ -380,7 +380,7 @@ impl TransferJob { } } - pub async fn write(&mut self, block: FileTransferBlock, raw: Option<&[u8]>) -> ResultType<()> { + pub async fn write(&mut self, block: FileTransferBlock) -> ResultType<()> { if block.id != self.id { bail!("Wrong id"); } @@ -402,20 +402,15 @@ impl TransferJob { let path = format!("{}.download", get_string(&path)); self.file = Some(File::create(&path).await?); } - let data = if let Some(data) = raw { - data - } else { - &block.data - }; if block.compressed { - let tmp = decompress(data); + let tmp = decompress(&block.data); self.file.as_mut().unwrap().write_all(&tmp).await?; self.finished_size += tmp.len() as u64; } else { - self.file.as_mut().unwrap().write_all(data).await?; - self.finished_size += data.len() as u64; + self.file.as_mut().unwrap().write_all(&block.data).await?; + self.finished_size += block.data.len() as u64; } - self.transferred += data.len() as u64; + self.transferred += block.data.len() as u64; Ok(()) } diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 04d1d4d29..447b89290 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -925,7 +925,7 @@ impl Remote { block.file_num ); if let Some(job) = fs::get_job(block.id, &mut self.write_jobs) { - if let Err(_err) = job.write(block, None).await { + if let Err(_err) = job.write(block).await { // to-do: add "skip" for writing job } self.update_jobs_status(); diff --git a/src/server/connection.rs b/src/server/connection.rs index 3644066e2..891c48888 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1609,7 +1609,8 @@ async fn start_ipc( file_num, data, compressed}) = data { - stream.send(&Data::FS(ipc::FS::WriteBlock{id, file_num, data, compressed})).await?; + stream.send(&Data::FS(ipc::FS::WriteBlock{id, file_num, data: Bytes::new(), compressed})).await?; + stream.send_raw(data).await?; } else { stream.send(&data).await?; } diff --git a/src/ui_cm_interface.rs b/src/ui_cm_interface.rs index 72225b3fb..e8668a2ab 100644 --- a/src/ui_cm_interface.rs +++ b/src/ui_cm_interface.rs @@ -1,3 +1,5 @@ +#[cfg(any(target_os = "android", target_os = "ios", feature = "flutter"))] +use std::iter::FromIterator; #[cfg(windows)] use std::sync::Arc; use std::{ @@ -8,8 +10,6 @@ use std::{ RwLock, }, }; -#[cfg(any(target_os = "android", target_os = "ios", feature = "flutter"))] -use std::iter::FromIterator; #[cfg(windows)] use clipboard::{cliprdr::CliprdrClientContext, empty_clipboard, set_conn_enabled, ContextSend}; @@ -337,8 +337,15 @@ impl IpcTaskRunner { Data::ChatMessage { text } => { self.cm.new_message(self.conn_id, text); } - Data::FS(fs) => { - handle_fs(fs, &mut write_jobs, &self.tx).await; + Data::FS(mut fs) => { + if let ipc::FS::WriteBlock { id, file_num, data: _, compressed } = fs { + if let Ok(bytes) = self.stream.next_raw().await { + fs = ipc::FS::WriteBlock{id, file_num, data:bytes.into(), compressed}; + handle_fs(fs, &mut write_jobs, &self.tx).await; + } + } else { + handle_fs(fs, &mut write_jobs, &self.tx).await; + } } #[cfg(windows)] Data::ClipbaordFile(_clip) => { @@ -588,16 +595,13 @@ async fn handle_fs(fs: ipc::FS, write_jobs: &mut Vec, tx: &Unbo } => { if let Some(job) = fs::get_job(id, write_jobs) { if let Err(err) = job - .write( - FileTransferBlock { - id, - file_num, - data, - compressed, - ..Default::default() - }, - None, - ) + .write(FileTransferBlock { + id, + file_num, + data, + compressed, + ..Default::default() + }) .await { send_raw(fs::new_error(id, err, file_num), &tx); From a98e655cc765f9599918b74bfa2d8a5374ad5f2d Mon Sep 17 00:00:00 2001 From: csf Date: Wed, 16 Nov 2022 18:59:13 +0900 Subject: [PATCH 2/2] remove unused log --- src/client/io_loop.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 447b89290..3e691da95 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -919,11 +919,6 @@ impl Remote { } } Some(file_response::Union::Block(block)) => { - log::info!( - "file response block, file id:{}, file num: {}", - block.id, - block.file_num - ); if let Some(job) = fs::get_job(block.id, &mut self.write_jobs) { if let Err(_err) = job.write(block).await { // to-do: add "skip" for writing job