Commit: f5017f5
Parent: b62facc

Drop unused printer connection

Mårten Åsberg committed on 2026-03-20 at 19:03
src/receipt_printer/receipt_printer_actor.rs +24 -10
diff --git a/src/receipt_printer/receipt_printer_actor.rs b/src/receipt_printer/receipt_printer_actor.rs
index d2b8f44..2e54d11 100644
@@ -1,7 +1,10 @@
use std::sync::Arc;
use std::{sync::Arc, time::Duration};
use escpos::errors::PrinterError;
use tokio::sync::{mpsc, oneshot};
use tokio::{
sync::{mpsc, oneshot},
time::timeout,
};
use super::escpos_printer::EscposPrinter;
@@ -26,14 +29,21 @@ impl EscposPrinterActor {
};
tokio::spawn(async move {
while let Some(request) = actor.receiver.recv().await {
let response_result = match request {
EscposPrinterRequest::PrintImage(image, responder) => {
responder.send(actor.print_image(&image))
loop {
let future = timeout(Duration::from_secs(5), actor.receiver.recv());
match future.await {
Ok(Some(request)) => {
let response_result = match request {
EscposPrinterRequest::PrintImage(image, responder) => {
responder.send(actor.print_image(&image))
}
};
if let Err(error) = response_result {
println!("Could not respond to request: {error:?}");
}
}
};
if let Err(error) = response_result {
println!("Could not respond to request: {error:?}");
Err(_) => actor.disconnect_printer(),
Ok(None) => return,
}
}
});
@@ -45,11 +55,15 @@ impl EscposPrinterActor {
printer.print_image(image)
}
fn ensure_printer_connection<'s>(&'s mut self) -> Result<&'s mut EscposPrinter, PrinterError> {
fn ensure_printer_connection(&mut self) -> Result<&mut EscposPrinter, PrinterError> {
let printer = match self.printer.take() {
Some(printer) => printer,
None => EscposPrinter::open(&self.host, self.port)?,
};
Ok(self.printer.insert(printer))
}
fn disconnect_printer(&mut self) {
_ = self.printer.take();
}
}