add: remote ret back override confirmation

This commit is contained in:
Kingtous 2022-04-28 17:42:22 +08:00
parent 51caeafebd
commit c17e77148e
8 changed files with 117 additions and 80 deletions

View File

@ -245,13 +245,13 @@ message FileAction {
oneof union { oneof union {
ReadDir read_dir = 1; ReadDir read_dir = 1;
FileTransferSendRequest send = 2; FileTransferSendRequest send = 2;
FileTransferSendConfirmRequest send_confirm = 9;
FileTransferReceiveRequest receive = 3; FileTransferReceiveRequest receive = 3;
FileDirCreate create = 4; FileDirCreate create = 4;
FileRemoveDir remove_dir = 5; FileRemoveDir remove_dir = 5;
FileRemoveFile remove_file = 6; FileRemoveFile remove_file = 6;
ReadAllFiles all_files = 7; ReadAllFiles all_files = 7;
FileTransferCancel cancel = 8; FileTransferCancel cancel = 8;
FileTransferSendConfirmRequest send_confirm = 9;
} }
} }
@ -272,6 +272,7 @@ message FileTransferDigest {
sint32 file_num = 2; sint32 file_num = 2;
uint64 last_edit_timestamp = 3; uint64 last_edit_timestamp = 3;
uint64 file_size = 4; uint64 file_size = 4;
bool is_upload = 5;
} }
message FileTransferBlock { message FileTransferBlock {

View File

@ -455,8 +455,7 @@ impl TransferJob {
file_num: self.file_num, file_num: self.file_num,
last_edit_timestamp: last_modified, last_edit_timestamp: last_modified,
file_size: meta.len(), file_size: meta.len(),
unknown_fields: Default::default(), ..Default::default()
cached_size: Default::default(),
}); });
msg.set_file_response(resp); msg.set_file_response(resp);
stream.send(&msg).await?; stream.send(&msg).await?;

View File

@ -533,14 +533,14 @@ impl AudioHandler {
} }
self.simple = Some(Simple::new( self.simple = Some(Simple::new(
None, // Use the default server None, // Use the default server
&crate::get_app_name(), // Our applications name &crate::get_app_name(), // Our applications name
Direction::Playback, // We want a playback stream Direction::Playback, // We want a playback stream
None, // Use the default device None, // Use the default device
"playback", // Description of our stream "playback", // Description of our stream
&spec, // Our sample format &spec, // Our sample format
None, // Use default channel map None, // Use default channel map
None, // Use default buffering attributes None, // Use default buffering attributes
)?); )?);
self.sample_rate = (format0.sample_rate, format0.sample_rate); self.sample_rate = (format0.sample_rate, format0.sample_rate);
Ok(()) Ok(())
@ -1323,7 +1323,7 @@ pub enum Data {
AddPortForward((i32, String, i32)), AddPortForward((i32, String, i32)),
ToggleClipboardFile, ToggleClipboardFile,
NewRDP, NewRDP,
SetConfirmOverrideFile((i32, i32, bool, bool)), SetConfirmOverrideFile((i32, i32, bool, bool, bool)),
} }
#[derive(Clone)] #[derive(Clone)]

View File

@ -64,6 +64,7 @@ pub enum FS {
file_num: i32, file_num: i32,
file_size: u64, file_size: u64,
modified_time: u64, modified_time: u64,
is_upload: bool,
}, },
} }

View File

@ -1052,6 +1052,7 @@ impl Connection {
file_num: d.file_num, file_num: d.file_num,
file_size: d.file_size, file_size: d.file_size,
modified_time: d.last_edit_timestamp, modified_time: d.last_edit_timestamp,
is_upload: true,
}), }),
_ => {} _ => {}
}, },

View File

@ -189,6 +189,7 @@ impl ConnectionManager {
file_num, file_num,
file_size, file_size,
modified_time, modified_time,
is_upload,
} => { } => {
if let Some(job) = fs::get_job(id, write_jobs) { if let Some(job) = fs::get_job(id, write_jobs) {
let mut req = FileTransferSendConfirmRequest { let mut req = FileTransferSendConfirmRequest {
@ -208,21 +209,22 @@ impl ConnectionManager {
let path = get_string(&job.join(&file.name)); let path = get_string(&job.join(&file.name));
match is_write_need_confirmation(&path, &digest) { match is_write_need_confirmation(&path, &digest) {
Ok(digest) => { Ok(digest) => {
if digest.is_none() { if let Some(mut digest) = digest {
log::info!("skip job {}, file_num {}", id, file_num);
req.set_skip(true);
let msg_out = new_send_confirm(req);
Self::send(msg_out, conn).await;
} else {
// upload to server, but server has the same file, request // upload to server, but server has the same file, request
digest.is_upload = is_upload;
println!( println!(
"server has the same file, send server digest to local" "server has the same file, send server digest to local"
); );
let mut msg_out = Message::new(); let mut msg_out = Message::new();
let mut fr = FileResponse::new(); let mut fr = FileResponse::new();
fr.set_digest(digest.unwrap()); fr.set_digest(digest);
msg_out.set_file_response(fr); msg_out.set_file_response(fr);
Self::send(msg_out, conn).await; Self::send(msg_out, conn).await;
} else {
log::info!("skip job {}, file_num {}", id, file_num);
req.set_skip(true);
let msg_out = new_send_confirm(req);
Self::send(msg_out, conn).await;
} }
} }
Err(err) => { Err(err) => {

View File

@ -717,7 +717,7 @@ handler.confirmDeleteFiles = function(id, i, name) {
}); });
} }
handler.overrideFileConfirm = function(id, file_num, to) { handler.overrideFileConfirm = function(id, file_num, to, is_upload) {
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);
@ -732,15 +732,15 @@ handler.overrideFileConfirm = function(id, file_num, to) {
jt.updateJobStatus(id, -1, "cancel"); jt.updateJobStatus(id, -1, "cancel");
} else if (res.skip) { } else if (res.skip) {
if (res.remember){ if (res.remember){
handler.set_write_override(id,file_num,false,true); // handler.set_write_override(id,file_num,false,true, is_upload); //
} else { } else {
handler.set_write_override(id,file_num,false,false); // handler.set_write_override(id,file_num,false,false,is_upload); //
} }
} else { } else {
if (res.remember){ if (res.remember){
handler.set_write_override(id,file_num,true,true); // handler.set_write_override(id,file_num,true,true,is_upload); //
} else { } else {
handler.set_write_override(id,file_num,true,false); // handler.set_write_override(id,file_num,true,false,is_upload); //
} }
} }
}); });

View File

@ -219,7 +219,7 @@ impl sciter::EventHandler for Handler {
fn toggle_option(String); fn toggle_option(String);
fn get_remember(); fn get_remember();
fn peer_platform(); fn peer_platform();
fn set_write_override(i32,i32, bool,bool); // , fn set_write_override(i32,i32, bool,bool,bool); // ,
} }
} }
@ -546,12 +546,14 @@ impl Handler {
file_num: i32, file_num: i32,
is_override: bool, is_override: bool,
remember: bool, remember: bool,
is_upload: bool,
) -> bool { ) -> bool {
self.send(Data::SetConfirmOverrideFile(( self.send(Data::SetConfirmOverrideFile((
job_id, job_id,
file_num, file_num,
is_override, is_override,
remember, remember,
is_upload,
))); )));
true true
} }
@ -1580,25 +1582,43 @@ impl Remote {
} }
} }
} }
Data::SetConfirmOverrideFile((id, file_num, need_override, remember)) => { Data::SetConfirmOverrideFile((id, file_num, need_override, remember, is_upload)) => {
if let Some(job) = fs::get_job(id, &mut self.write_jobs) { if is_upload {
if remember { if let Some(job) = fs::get_job(id, &mut self.read_jobs) {
job.set_overwrite_strategy(Some(need_override)); if remember {
job.set_overwrite_strategy(Some(need_override));
}
job.confirm(&FileTransferSendConfirmRequest {
id,
file_num,
union: if need_override {
Some(file_transfer_send_confirm_request::Union::offset_blk(0))
} else {
Some(file_transfer_send_confirm_request::Union::skip(true))
},
..Default::default()
});
}
} else {
if let Some(job) = fs::get_job(id, &mut self.write_jobs) {
if remember {
job.set_overwrite_strategy(Some(need_override));
}
let mut msg = Message::new();
let mut file_action = FileAction::new();
file_action.set_send_confirm(FileTransferSendConfirmRequest {
id,
file_num,
union: if need_override {
Some(file_transfer_send_confirm_request::Union::offset_blk(0))
} else {
Some(file_transfer_send_confirm_request::Union::skip(true))
},
..Default::default()
});
msg.set_file_action(file_action);
allow_err!(peer.send(&msg).await);
} }
let mut msg = Message::new();
let mut file_action = FileAction::new();
file_action.set_send_confirm(FileTransferSendConfirmRequest {
id,
file_num,
union: if need_override {
Some(file_transfer_send_confirm_request::Union::offset_blk(0))
} else {
Some(file_transfer_send_confirm_request::Union::skip(true))
},
..Default::default()
});
msg.set_file_action(file_action);
allow_err!(peer.send(&msg).await);
} }
} }
Data::RemoveDirAll((id, path, is_remote)) => { Data::RemoveDirAll((id, path, is_remote)) => {
@ -1841,50 +1861,63 @@ impl Remote {
} }
} }
Some(file_response::Union::digest(digest)) => { Some(file_response::Union::digest(digest)) => {
if let Some(job) = fs::get_job(digest.id, &mut self.write_jobs) { if digest.is_upload {
if let Some(file) = job.files().get(digest.file_num as usize) { if let Some(job) = fs::get_job(digest.id, &mut self.read_jobs) {
let write_path = get_string(&job.join(&file.name)); if let Some(file) = job.files().get(digest.file_num as usize) {
let overwrite_strategy = job.default_overwrite_strategy(); let read_path = get_string(&job.join(&file.name));
match fs::is_write_need_confirmation(&write_path, &digest) { self.handler.call(
Ok(res) => { "overrideFileConfirm",
if res.is_some() { &make_args!(digest.id, digest.file_num, read_path, true),
// need confirm );
if overwrite_strategy.is_none() { }
self.handler.call( }
"overrideFileConfirm", } else {
&make_args!( if let Some(job) = fs::get_job(digest.id, &mut self.write_jobs) {
digest.id, if let Some(file) = job.files().get(digest.file_num as usize) {
digest.file_num, let write_path = get_string(&job.join(&file.name));
write_path let overwrite_strategy = job.default_overwrite_strategy();
), match fs::is_write_need_confirmation(&write_path, &digest) {
); Ok(res) => {
} else { if res.is_some() {
let msg = new_send_confirm( // need confirm
FileTransferSendConfirmRequest { if overwrite_strategy.is_none() {
id: digest.id, self.handler.call(
file_num: digest.file_num, "overrideFileConfirm",
union: if overwrite_strategy.unwrap() { &make_args!(
Some(file_transfer_send_confirm_request::Union::offset_blk(0)) digest.id,
} else { digest.file_num,
Some(file_transfer_send_confirm_request::Union::skip(true)) write_path,
false
),
);
} else {
let msg = new_send_confirm(
FileTransferSendConfirmRequest {
id: digest.id,
file_num: digest.file_num,
union: if overwrite_strategy.unwrap() {
Some(file_transfer_send_confirm_request::Union::offset_blk(0))
} else {
Some(file_transfer_send_confirm_request::Union::skip(true))
},
..Default::default()
}, },
..Default::default() );
}, allow_err!(peer.send(&msg).await);
); }
allow_err!(peer.send(&msg).await); } else {
} let msg= new_send_confirm(FileTransferSendConfirmRequest {
} else {
let msg= new_send_confirm(FileTransferSendConfirmRequest {
id: digest.id, id: digest.id,
file_num: digest.file_num, file_num: digest.file_num,
union: Some(file_transfer_send_confirm_request::Union::skip(true)), union: Some(file_transfer_send_confirm_request::Union::skip(true)),
..Default::default() ..Default::default()
}); });
allow_err!(peer.send(&msg).await); allow_err!(peer.send(&msg).await);
}
}
Err(err) => {
println!("error recving digest: {}", err);
} }
}
Err(err) => {
println!("error recving digest: {}", err);
} }
} }
} }