fix: clipboard, cmd ipc (#9270)

1. Send raw contents if `content_len` > 1024*3.
2. Send raw contents if it is not empty.
3. Try read clipboard again if no data from cm.

Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
fufesou 2024-09-05 23:39:07 +08:00 committed by GitHub
parent 4150036589
commit 26ebd0deb9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 22 deletions

View File

@ -95,6 +95,10 @@ impl Handler {
log::error!("Failed to read clipboard from cm: {}", e);
}
Ok(data) => {
// Skip sending empty clipboard data.
// Maybe there's something wrong reading the clipboard data in cm, but no error msg is returned.
// The clipboard data should not be empty, the last line will try again to get the clipboard data.
if !data.is_empty() {
let mut msg = Message::new();
let multi_clipboards = MultiClipboards {
clipboards: data
@ -117,6 +121,7 @@ impl Handler {
}
}
}
}
check_clipboard(&mut self.ctx, ClipboardSide::Host, false)
}

View File

@ -498,10 +498,10 @@ impl<T: InvokeUiCM> IpcTaskRunner<T> {
let (content, next_raw) = {
// TODO: find out a better threshold
if content_len > 1024 * 3 {
(c.content, false)
} else {
raw_contents.extend(c.content);
(bytes::Bytes::new(), true)
} else {
(c.content, false)
}
};
main_data.push(ClipboardNonFile {
@ -515,8 +515,10 @@ impl<T: InvokeUiCM> IpcTaskRunner<T> {
});
}
allow_err!(self.stream.send(&Data::ClipboardNonFile(Some(("".to_owned(), main_data)))).await);
if !raw_contents.is_empty() {
allow_err!(self.stream.send_raw(raw_contents.into()).await);
}
}
Err(e) => {
allow_err!(self.stream.send(&Data::ClipboardNonFile(Some((format!("{}", e), vec![])))).await);
}