add: automatic accept confirm log
This commit is contained in:
parent
5caf28ebe6
commit
8854fcbe85
@ -9,7 +9,7 @@ default-run = "rustdesk"
|
|||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "librustdesk"
|
name = "librustdesk"
|
||||||
crate-type = ["cdylib", "staticlib", "rlib"]
|
crate-type = ["cdylib", "staticlib", "rlib"]
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "naming"
|
name = "naming"
|
||||||
|
@ -198,11 +198,11 @@ pub struct TransferJob {
|
|||||||
files: Vec<FileEntry>,
|
files: Vec<FileEntry>,
|
||||||
file_num: i32,
|
file_num: i32,
|
||||||
file: Option<File>,
|
file: Option<File>,
|
||||||
file_confirmed: bool,
|
|
||||||
file_is_waiting: bool,
|
|
||||||
total_size: u64,
|
total_size: u64,
|
||||||
finished_size: u64,
|
finished_size: u64,
|
||||||
transferred: u64,
|
transferred: u64,
|
||||||
|
file_confirmed: bool,
|
||||||
|
file_is_waiting: bool,
|
||||||
default_overwrite_strategy: Option<bool>,
|
default_overwrite_strategy: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -315,6 +315,7 @@ impl TransferJob {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn write(&mut self, block: FileTransferBlock, raw: Option<&[u8]>) -> ResultType<()> {
|
pub async fn write(&mut self, block: FileTransferBlock, raw: Option<&[u8]>) -> ResultType<()> {
|
||||||
|
println!("write file transfer blk[{},{}]", block.id, block.file_num);
|
||||||
if block.id != self.id {
|
if block.id != self.id {
|
||||||
bail!("Wrong id");
|
bail!("Wrong id");
|
||||||
}
|
}
|
||||||
@ -386,25 +387,8 @@ impl TransferJob {
|
|||||||
}
|
}
|
||||||
if !self.file_confirmed() {
|
if !self.file_confirmed() {
|
||||||
if !self.file_is_waiting() {
|
if !self.file_is_waiting() {
|
||||||
let mut msg = Message::new();
|
self.send_current_digest(stream).await?;
|
||||||
let mut resp = FileResponse::new();
|
|
||||||
let meta = self.file.as_ref().unwrap().metadata().await?;
|
|
||||||
let last_modified = meta
|
|
||||||
.modified()?
|
|
||||||
.duration_since(SystemTime::UNIX_EPOCH)?
|
|
||||||
.as_secs();
|
|
||||||
resp.set_digest(FileTransferDigest {
|
|
||||||
id: self.id,
|
|
||||||
file_num: self.file_num,
|
|
||||||
last_edit_timestamp: last_modified,
|
|
||||||
file_size: meta.len(),
|
|
||||||
unknown_fields: Default::default(),
|
|
||||||
cached_size: Default::default(),
|
|
||||||
});
|
|
||||||
self.set_file_is_waiting(true);
|
self.set_file_is_waiting(true);
|
||||||
msg.set_file_response(resp);
|
|
||||||
stream.send(&msg);
|
|
||||||
println!("digest message is sent. waiting for confirm.");
|
|
||||||
}
|
}
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
}
|
}
|
||||||
@ -457,6 +441,32 @@ impl TransferJob {
|
|||||||
..Default::default()
|
..Default::default()
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn send_current_digest(&mut self, stream: &mut Stream) -> ResultType<()> {
|
||||||
|
let mut msg = Message::new();
|
||||||
|
let mut resp = FileResponse::new();
|
||||||
|
let meta = self.file.as_ref().unwrap().metadata().await?;
|
||||||
|
let last_modified = meta
|
||||||
|
.modified()?
|
||||||
|
.duration_since(SystemTime::UNIX_EPOCH)?
|
||||||
|
.as_secs();
|
||||||
|
resp.set_digest(FileTransferDigest {
|
||||||
|
id: self.id,
|
||||||
|
file_num: self.file_num,
|
||||||
|
last_edit_timestamp: last_modified,
|
||||||
|
file_size: meta.len(),
|
||||||
|
unknown_fields: Default::default(),
|
||||||
|
cached_size: Default::default(),
|
||||||
|
});
|
||||||
|
msg.set_file_response(resp);
|
||||||
|
stream.send(&msg).await?;
|
||||||
|
println!(
|
||||||
|
"id: {}, file_num:{}, digest message is sent. waiting for confirm. msg: {:?}",
|
||||||
|
self.id, self.file_num, msg
|
||||||
|
);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn set_overwrite_strategy(&mut self, overwrite_strategy: Option<bool>) {
|
pub fn set_overwrite_strategy(&mut self, overwrite_strategy: Option<bool>) {
|
||||||
self.default_overwrite_strategy = overwrite_strategy;
|
self.default_overwrite_strategy = overwrite_strategy;
|
||||||
}
|
}
|
||||||
@ -488,6 +498,29 @@ impl TransferJob {
|
|||||||
self.file_num += 1;
|
self.file_num += 1;
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn confirm(&mut self, r: &FileTransferSendConfirmRequest) -> bool {
|
||||||
|
if self.file_num() != r.file_num {
|
||||||
|
log::debug!("file num truncated, ignoring");
|
||||||
|
} else {
|
||||||
|
match r.union {
|
||||||
|
Some(file_transfer_send_confirm_request::Union::skip(s)) => {
|
||||||
|
if s {
|
||||||
|
log::debug!("skip current file");
|
||||||
|
self.skip_current_file();
|
||||||
|
} else {
|
||||||
|
self.set_file_confirmed(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Some(file_transfer_send_confirm_request::Union::offset_blk(offset)) => {
|
||||||
|
println!("file confirmed");
|
||||||
|
self.set_file_confirmed(true);
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
@ -506,6 +539,7 @@ pub fn new_error<T: std::string::ToString>(id: i32, err: T, file_num: i32) -> Me
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn new_dir(id: i32, path: String, files: Vec<FileEntry>) -> Message {
|
pub fn new_dir(id: i32, path: String, files: Vec<FileEntry>) -> Message {
|
||||||
|
println!("[fs.rs:510] create new dir");
|
||||||
let mut resp = FileResponse::new();
|
let mut resp = FileResponse::new();
|
||||||
resp.set_dir(FileDirectory {
|
resp.set_dir(FileDirectory {
|
||||||
id,
|
id,
|
||||||
@ -585,6 +619,7 @@ pub async fn handle_read_jobs(
|
|||||||
) -> ResultType<()> {
|
) -> ResultType<()> {
|
||||||
let mut finished = Vec::new();
|
let mut finished = Vec::new();
|
||||||
for job in jobs.iter_mut() {
|
for job in jobs.iter_mut() {
|
||||||
|
// println!("[fs.rs:588] handle_read_jobs. {:?}", job.id);
|
||||||
match job.read(stream).await {
|
match job.read(stream).await {
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
stream
|
stream
|
||||||
@ -598,6 +633,8 @@ pub async fn handle_read_jobs(
|
|||||||
if !job.file_confirmed && !job.file_is_waiting {
|
if !job.file_confirmed && !job.file_is_waiting {
|
||||||
finished.push(job.id());
|
finished.push(job.id());
|
||||||
stream.send(&new_done(job.id(), job.file_num())).await?;
|
stream.send(&new_done(job.id(), job.file_num())).await?;
|
||||||
|
} else {
|
||||||
|
log::info!("waiting confirmation.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -646,8 +683,16 @@ pub fn is_write_need_confirmation(
|
|||||||
if path.exists() && path.is_file() {
|
if path.exists() && path.is_file() {
|
||||||
let metadata = std::fs::metadata(path)?;
|
let metadata = std::fs::metadata(path)?;
|
||||||
let modified_time = metadata.modified()?;
|
let modified_time = metadata.modified()?;
|
||||||
let remote_mt = Duration::from_millis(digest.last_edit_timestamp);
|
let remote_mt = Duration::from_secs(digest.last_edit_timestamp);
|
||||||
let local_mt = modified_time.duration_since(UNIX_EPOCH)?;
|
let local_mt = modified_time.duration_since(UNIX_EPOCH)?;
|
||||||
|
println!(
|
||||||
|
"{:?}:rm:{},lm:{},rf:{},lf:{}",
|
||||||
|
path,
|
||||||
|
remote_mt.as_secs(),
|
||||||
|
local_mt.as_secs(),
|
||||||
|
digest.file_size,
|
||||||
|
metadata.len()
|
||||||
|
);
|
||||||
// if
|
// if
|
||||||
// is_recv && remote_mt >= local_mt) || (!is_recv && remote_mt <= local_mt) ||
|
// is_recv && remote_mt >= local_mt) || (!is_recv && remote_mt <= local_mt) ||
|
||||||
if remote_mt == local_mt && digest.file_size == metadata.len() {
|
if remote_mt == local_mt && digest.file_size == metadata.len() {
|
||||||
|
@ -59,6 +59,12 @@ pub enum FS {
|
|||||||
id: i32,
|
id: i32,
|
||||||
file_num: i32,
|
file_num: i32,
|
||||||
},
|
},
|
||||||
|
CheckDigest {
|
||||||
|
id: i32,
|
||||||
|
file_num: i32,
|
||||||
|
file_size: u64,
|
||||||
|
modified_time: u64,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone)]
|
#[derive(Debug, Serialize, Deserialize, Clone)]
|
||||||
|
@ -21,6 +21,7 @@ use hbb_common::{
|
|||||||
},
|
},
|
||||||
tokio_util::codec::{BytesCodec, Framed},
|
tokio_util::codec::{BytesCodec, Framed},
|
||||||
};
|
};
|
||||||
|
use libc::{printf, send};
|
||||||
#[cfg(any(target_os = "android", target_os = "ios"))]
|
#[cfg(any(target_os = "android", target_os = "ios"))]
|
||||||
use scrap::android::call_input_service_mouse_input;
|
use scrap::android::call_input_service_mouse_input;
|
||||||
use serde_json::{json, value::Value};
|
use serde_json::{json, value::Value};
|
||||||
@ -273,7 +274,7 @@ impl Connection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ipc::Data::RawMessage(bytes) => {
|
ipc::Data::RawMessage(bytes) => {
|
||||||
allow_err!(conn.stream.send_raw(bytes).await);
|
conn.stream.send_raw(bytes).await;
|
||||||
}
|
}
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
ipc::Data::ClipbaordFile(_clip) => {
|
ipc::Data::ClipbaordFile(_clip) => {
|
||||||
@ -892,6 +893,7 @@ impl Connection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if self.authorized {
|
} else if self.authorized {
|
||||||
|
// println!("on_message: {:?}", msg);
|
||||||
match msg.union {
|
match msg.union {
|
||||||
Some(message::Union::mouse_event(me)) => {
|
Some(message::Union::mouse_event(me)) => {
|
||||||
#[cfg(any(target_os = "android", target_os = "ios"))]
|
#[cfg(any(target_os = "android", target_os = "ios"))]
|
||||||
@ -953,6 +955,7 @@ impl Connection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(message::Union::file_action(fa)) => {
|
Some(message::Union::file_action(fa)) => {
|
||||||
|
println!("recv file_action, {:?}", fa);
|
||||||
if self.file_transfer.is_some() {
|
if self.file_transfer.is_some() {
|
||||||
match fa.union {
|
match fa.union {
|
||||||
Some(file_action::Union::read_dir(rd)) => {
|
Some(file_action::Union::read_dir(rd)) => {
|
||||||
@ -985,6 +988,7 @@ impl Connection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(file_action::Union::receive(r)) => {
|
Some(file_action::Union::receive(r)) => {
|
||||||
|
println!("[connection.rs:891] recv FileTransferReceiveRequest");
|
||||||
self.send_fs(ipc::FS::NewWrite {
|
self.send_fs(ipc::FS::NewWrite {
|
||||||
path: r.path,
|
path: r.path,
|
||||||
id: r.id,
|
id: r.id,
|
||||||
@ -1021,32 +1025,9 @@ impl Connection {
|
|||||||
fs::remove_job(c.id, &mut self.read_jobs);
|
fs::remove_job(c.id, &mut self.read_jobs);
|
||||||
}
|
}
|
||||||
Some(file_action::Union::send_confirm(r)) => {
|
Some(file_action::Union::send_confirm(r)) => {
|
||||||
let job_it = self
|
|
||||||
.read_jobs
|
|
||||||
.iter_mut()
|
|
||||||
.filter(|job| job.id() == r.id)
|
|
||||||
.next();
|
|
||||||
println!("recv send confirm request");
|
println!("recv send confirm request");
|
||||||
if let Some(job) = job_it {
|
if let Some(job) = fs::get_job(r.id, &mut self.read_jobs) {
|
||||||
if job.file_num() != r.file_num {
|
job.confirm(&r);
|
||||||
debug!("file num truncated, ignoring");
|
|
||||||
} else {
|
|
||||||
match r.union {
|
|
||||||
Some(file_transfer_send_confirm_request::Union::skip(s)) => {
|
|
||||||
if s {
|
|
||||||
println!("skip current file");
|
|
||||||
job.skip_current_file();
|
|
||||||
} else {
|
|
||||||
job.set_file_confirmed(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Some(file_transfer_send_confirm_request::Union::offset_blk(offset)) => {
|
|
||||||
println!("file confirmed");
|
|
||||||
job.set_file_confirmed(true);
|
|
||||||
},
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
@ -1068,6 +1049,12 @@ impl Connection {
|
|||||||
file_num: d.file_num,
|
file_num: d.file_num,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Some(file_response::Union::digest(d)) => self.send_fs(ipc::FS::CheckDigest {
|
||||||
|
id: d.id,
|
||||||
|
file_num: d.file_num,
|
||||||
|
file_size: d.file_size,
|
||||||
|
modified_time: d.last_edit_timestamp,
|
||||||
|
}),
|
||||||
_ => {}
|
_ => {}
|
||||||
},
|
},
|
||||||
Some(message::Union::misc(misc)) => match misc.union {
|
Some(message::Union::misc(misc)) => match misc.union {
|
||||||
@ -1209,6 +1196,7 @@ impl Connection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn read_dir(&mut self, dir: &str, include_hidden: bool) {
|
fn read_dir(&mut self, dir: &str, include_hidden: bool) {
|
||||||
|
// println!("[connection.rs:1130] read_dir");
|
||||||
let dir = dir.to_string();
|
let dir = dir.to_string();
|
||||||
self.send_fs(ipc::FS::ReadDir {
|
self.send_fs(ipc::FS::ReadDir {
|
||||||
dir,
|
dir,
|
||||||
|
28
src/ui/cm.rs
28
src/ui/cm.rs
@ -133,6 +133,7 @@ impl ConnectionManager {
|
|||||||
dir,
|
dir,
|
||||||
include_hidden,
|
include_hidden,
|
||||||
} => {
|
} => {
|
||||||
|
// println!("[cm.rs:126] ipc::FS::ReadDir recved");
|
||||||
Self::read_dir(&dir, include_hidden, conn).await;
|
Self::read_dir(&dir, include_hidden, conn).await;
|
||||||
}
|
}
|
||||||
ipc::FS::RemoveDir {
|
ipc::FS::RemoveDir {
|
||||||
@ -153,6 +154,7 @@ impl ConnectionManager {
|
|||||||
id,
|
id,
|
||||||
mut files,
|
mut files,
|
||||||
} => {
|
} => {
|
||||||
|
println!("new write in ipc::FS::NewWrite");
|
||||||
write_jobs.push(fs::TransferJob::new_write(
|
write_jobs.push(fs::TransferJob::new_write(
|
||||||
id,
|
id,
|
||||||
path,
|
path,
|
||||||
@ -179,6 +181,30 @@ impl ConnectionManager {
|
|||||||
fs::remove_job(id, write_jobs);
|
fs::remove_job(id, write_jobs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ipc::FS::CheckDigest {
|
||||||
|
id,
|
||||||
|
file_num,
|
||||||
|
file_size,
|
||||||
|
modified_time,
|
||||||
|
} => {
|
||||||
|
if let Some(job) = fs::get_job(id, write_jobs) {
|
||||||
|
// TODO
|
||||||
|
let mut msg_out = Message::new();
|
||||||
|
let mut file_action = FileAction::new();
|
||||||
|
file_action.set_send_confirm(FileTransferSendConfirmRequest {
|
||||||
|
id,
|
||||||
|
file_num,
|
||||||
|
union: Some(file_transfer_send_confirm_request::Union::offset_blk(0)),
|
||||||
|
..Default::default()
|
||||||
|
});
|
||||||
|
msg_out.set_file_action(file_action);
|
||||||
|
println!(
|
||||||
|
"[CHECK DIGEST] dig dest recved. confirmed. msg: {:?}",
|
||||||
|
msg_out
|
||||||
|
);
|
||||||
|
Self::send(msg_out, conn).await;
|
||||||
|
}
|
||||||
|
}
|
||||||
ipc::FS::WriteBlock {
|
ipc::FS::WriteBlock {
|
||||||
id,
|
id,
|
||||||
file_num,
|
file_num,
|
||||||
@ -238,6 +264,7 @@ impl ConnectionManager {
|
|||||||
let mut file_response = FileResponse::new();
|
let mut file_response = FileResponse::new();
|
||||||
file_response.set_dir(fd);
|
file_response.set_dir(fd);
|
||||||
msg_out.set_file_response(file_response);
|
msg_out.set_file_response(file_response);
|
||||||
|
// println!("[cm.rs:229] set dir");
|
||||||
Self::send(msg_out, conn).await;
|
Self::send(msg_out, conn).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -300,6 +327,7 @@ impl ConnectionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn send(msg: Message, conn: &mut Connection) {
|
async fn send(msg: Message, conn: &mut Connection) {
|
||||||
|
println!("send msg: {:?}", msg);
|
||||||
match msg.write_to_bytes() {
|
match msg.write_to_bytes() {
|
||||||
Ok(bytes) => allow_err!(conn.send(&Data::RawMessage(bytes)).await),
|
Ok(bytes) => allow_err!(conn.send(&Data::RawMessage(bytes)).await),
|
||||||
err => allow_err!(err),
|
err => allow_err!(err),
|
||||||
|
@ -721,20 +721,27 @@ handler.overrideFileConfirm = function(id, file_num, to) {
|
|||||||
var jt = file_transfer.job_table;
|
var jt = file_transfer.job_table;
|
||||||
var job = jt.job_map[id];
|
var job = jt.job_map[id];
|
||||||
stdout.println("job type: " + job.type);
|
stdout.println("job type: " + job.type);
|
||||||
stdout.println(id + path + to);
|
|
||||||
stdout.println(JSON.stringify(job));
|
stdout.println(JSON.stringify(job));
|
||||||
msgbox("custom-skip", "Confirm Write Strategy", "<div .form> \
|
msgbox("custom-skip", "Confirm Write Strategy", "<div .form> \
|
||||||
<div>" + translate('Overwrite') + translate('files') + ".</div> \
|
<div>" + translate('Overwrite') + translate('files') + ".</div> \
|
||||||
<div>" + translate('This file exists in your computer, skip or overwrite this file?') + "</div> \
|
<div>" + translate('This file exists, skip or overwrite this file?') + "</div> \
|
||||||
<div.ellipsis style=\"font-weight: bold;\" .text>" + to + "</div> \
|
<div.ellipsis style=\"font-weight: bold;\" .text>" + to + "</div> \
|
||||||
<div><button|checkbox(remember) {ts}>" + translate('Do this for all conflicts') + "</button></div> \
|
<div><button|checkbox(remember) {ts}>" + translate('Do this for all conflicts') + "</button></div> \
|
||||||
</div>", function(res=null) {
|
</div>", function(res=null) {
|
||||||
if (!res) {
|
if (!res) {
|
||||||
jt.updateJobStatus(id, -1, "cancel");
|
jt.updateJobStatus(id, -1, "cancel");
|
||||||
} else if (res.skip) {
|
} else if (res.skip) {
|
||||||
handler.set_write_override(id,file_num,false,true); //
|
if (res.remember){
|
||||||
|
handler.set_write_override(id,file_num,false,true); //
|
||||||
|
} else {
|
||||||
|
handler.set_write_override(id,file_num,false,false); //
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
handler.set_write_override(id,file_num,true,false); //
|
if (res.remember){
|
||||||
|
handler.set_write_override(id,file_num,true,true); //
|
||||||
|
} else {
|
||||||
|
handler.set_write_override(id,file_num,true,false); //
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ use clipboard::{
|
|||||||
};
|
};
|
||||||
use enigo::{self, Enigo, KeyboardControllable};
|
use enigo::{self, Enigo, KeyboardControllable};
|
||||||
use hbb_common::fs::{get_string, is_file_exists};
|
use hbb_common::fs::{get_string, is_file_exists};
|
||||||
|
use hbb_common::log::log;
|
||||||
use hbb_common::{
|
use hbb_common::{
|
||||||
allow_err,
|
allow_err,
|
||||||
config::{self, Config, LocalConfig, PeerConfig},
|
config::{self, Config, LocalConfig, PeerConfig},
|
||||||
@ -1517,7 +1518,7 @@ impl Remote {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn handle_msg_from_ui(&mut self, data: Data, peer: &mut Stream) -> bool {
|
async fn handle_msg_from_ui(&mut self, data: Data, peer: &mut Stream) -> bool {
|
||||||
println!("new msg from ui");
|
// log::info!("new msg from ui, {}",data);
|
||||||
match data {
|
match data {
|
||||||
Data::Close => {
|
Data::Close => {
|
||||||
return false;
|
return false;
|
||||||
@ -1759,6 +1760,7 @@ impl Remote {
|
|||||||
|
|
||||||
async fn handle_msg_from_peer(&mut self, data: &[u8], peer: &mut Stream) -> bool {
|
async fn handle_msg_from_peer(&mut self, data: &[u8], peer: &mut Stream) -> bool {
|
||||||
if let Ok(msg_in) = Message::parse_from_bytes(&data) {
|
if let Ok(msg_in) = Message::parse_from_bytes(&data) {
|
||||||
|
println!("recved msg from peer, decoded: {:?}", msg_in);
|
||||||
match msg_in.union {
|
match msg_in.union {
|
||||||
Some(message::Union::video_frame(vf)) => {
|
Some(message::Union::video_frame(vf)) => {
|
||||||
if !self.first_frame {
|
if !self.first_frame {
|
||||||
@ -1826,11 +1828,7 @@ impl Remote {
|
|||||||
}
|
}
|
||||||
Some(message::Union::file_response(fr)) => match fr.union {
|
Some(message::Union::file_response(fr)) => match fr.union {
|
||||||
Some(file_response::Union::dir(fd)) => {
|
Some(file_response::Union::dir(fd)) => {
|
||||||
println!("file_response is dir: {}", fd.path);
|
|
||||||
let entries = fd.entries.to_vec();
|
let entries = fd.entries.to_vec();
|
||||||
for entry in &entries {
|
|
||||||
println!("dir file: {}", entry.name);
|
|
||||||
}
|
|
||||||
let mut m = make_fd(fd.id, &entries, fd.id > 0);
|
let mut m = make_fd(fd.id, &entries, fd.id > 0);
|
||||||
if fd.id <= 0 {
|
if fd.id <= 0 {
|
||||||
m.set_item("path", fd.path);
|
m.set_item("path", fd.path);
|
||||||
@ -1843,6 +1841,7 @@ impl Remote {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(file_response::Union::digest(digest)) => {
|
Some(file_response::Union::digest(digest)) => {
|
||||||
|
log::info!("recv file transfer digest");
|
||||||
if let Some(job) = fs::get_job(digest.id, &mut self.write_jobs) {
|
if let Some(job) = fs::get_job(digest.id, &mut self.write_jobs) {
|
||||||
if let Some(file) = job.files().get(digest.file_num as usize) {
|
if let Some(file) = job.files().get(digest.file_num as usize) {
|
||||||
let write_path = get_string(&job.join(&file.name));
|
let write_path = get_string(&job.join(&file.name));
|
||||||
@ -1902,7 +1901,7 @@ impl Remote {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(file_response::Union::block(block)) => {
|
Some(file_response::Union::block(block)) => {
|
||||||
println!("file response block, file num: {}", block.file_num);
|
log::info!("file response block, file num: {}", block.file_num);
|
||||||
if let Some(job) = fs::get_job(block.id, &mut self.write_jobs) {
|
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, None).await {
|
||||||
// to-do: add "skip" for writing job
|
// to-do: add "skip" for writing job
|
||||||
@ -1912,7 +1911,7 @@ impl Remote {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(file_response::Union::done(d)) => {
|
Some(file_response::Union::done(d)) => {
|
||||||
println!("file response done");
|
log::info!("file response done");
|
||||||
if let Some(job) = fs::get_job(d.id, &mut self.write_jobs) {
|
if let Some(job) = fs::get_job(d.id, &mut self.write_jobs) {
|
||||||
job.modify_time();
|
job.modify_time();
|
||||||
fs::remove_job(d.id, &mut self.write_jobs);
|
fs::remove_job(d.id, &mut self.write_jobs);
|
||||||
@ -1999,6 +1998,14 @@ impl Remote {
|
|||||||
self.audio_sender.send(MediaData::AudioFrame(frame)).ok();
|
self.audio_sender.send(MediaData::AudioFrame(frame)).ok();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Some(message::Union::file_action(action)) => match action.union {
|
||||||
|
Some(file_action::Union::send_confirm(c)) => {
|
||||||
|
if let Some(job) = fs::get_job(c.id, &mut self.read_jobs) {
|
||||||
|
job.confirm(&c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
},
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user