mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-04-14 20:51:28 +03:00
fix: remote printer (#11270)
* fix: remote printer, log Signed-off-by: fufesou <linlong1266@gmail.com> * fix: remote printer, avoid double sign Signed-off-by: fufesou <linlong1266@gmail.com> * Spawn a new thread to handle the print job. Signed-off-by: fufesou <linlong1266@gmail.com> --------- Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
@@ -1550,21 +1550,32 @@ impl<T: InvokeUiSession> Remote<T> {
|
|||||||
fs::JobType::Generic => {
|
fs::JobType::Generic => {
|
||||||
self.handle_job_status(d.id, d.file_num, err);
|
self.handle_job_status(d.id, d.file_num, err);
|
||||||
}
|
}
|
||||||
fs::JobType::Printer =>
|
fs::JobType::Printer => {
|
||||||
{
|
if let Some(err) = err {
|
||||||
#[cfg(target_os = "windows")]
|
log::error!("Received printer job failed, error {err}");
|
||||||
if let Some(data) = printer_data {
|
} else {
|
||||||
let printer_name = self
|
log::info!(
|
||||||
.handler
|
"Received printer job done, data len: {:?}",
|
||||||
.printer_names
|
printer_data.as_ref().map(|d| d.len()).unwrap_or(0)
|
||||||
.write()
|
);
|
||||||
.unwrap()
|
#[cfg(target_os = "windows")]
|
||||||
.remove(&d.id);
|
if let Some(data) = printer_data {
|
||||||
crate::platform::send_raw_data_to_printer(
|
let printer_name = self
|
||||||
printer_name,
|
.handler
|
||||||
data,
|
.printer_names
|
||||||
)
|
.write()
|
||||||
.ok();
|
.unwrap()
|
||||||
|
.remove(&d.id);
|
||||||
|
// Spawn a new thread to handle the print job.
|
||||||
|
// Or print job will block the ui thread.
|
||||||
|
std::thread::spawn(move || {
|
||||||
|
crate::platform::send_raw_data_to_printer(
|
||||||
|
printer_name,
|
||||||
|
data,
|
||||||
|
)
|
||||||
|
.ok();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2427,13 +2427,15 @@ impl Connection {
|
|||||||
fs::DataSource::FilePath(PathBuf::from(&path));
|
fs::DataSource::FilePath(PathBuf::from(&path));
|
||||||
}
|
}
|
||||||
JobType::Printer => {
|
JobType::Printer => {
|
||||||
if let Some(pd) =
|
if let Some((_, _, data)) = self
|
||||||
self.printer_data.iter().find(|(_, p, _)| *p == path)
|
.printer_data
|
||||||
|
.iter()
|
||||||
|
.position(|(_, p, _)| *p == path)
|
||||||
|
.map(|index| self.printer_data.remove(index))
|
||||||
{
|
{
|
||||||
data_source = fs::DataSource::MemoryCursor(
|
data_source = fs::DataSource::MemoryCursor(
|
||||||
std::io::Cursor::new(pd.2.clone()),
|
std::io::Cursor::new(data),
|
||||||
);
|
);
|
||||||
self.printer_data.retain(|f| f.1 != path);
|
|
||||||
} else {
|
} else {
|
||||||
// Ignore this message if the printer data is not found
|
// Ignore this message if the printer data is not found
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user