Switch to persistent printer with queue

This commit is contained in:
Joscha 2025-02-27 01:28:08 +01:00
parent 0ea4cf1d22
commit 6555e9c0bd
14 changed files with 221 additions and 76 deletions

View file

@ -1,19 +1,24 @@
mod drawer;
mod persistent_printer;
mod printer;
mod server;
use std::path::PathBuf;
use std::{path::PathBuf, time::Duration};
use clap::Parser;
use drawer::Drawer;
use printer::Printer;
use drawer::{BacklogDrawing, Command};
use tokio::{runtime::Runtime, sync::mpsc};
use self::{drawer::Drawer, persistent_printer::PersistentPrinter};
#[derive(Parser)]
struct Args {
/// Address the web server will listen at.
addr: String,
/// Path to the queue directory.
queue: PathBuf,
/// Path to the printer's USB device file.
///
/// Usually, this is located at `/dev/usb/lp0` or a similar location.
@ -30,11 +35,17 @@ fn main() -> anyhow::Result<()> {
let (tx, rx) = mpsc::channel(3);
let printer = Printer::new(args.printer, args.export)?;
let printer = PersistentPrinter::new(args.printer, args.export, args.queue);
let mut drawer = Drawer::new(rx, printer);
let runtime = Runtime::new()?;
runtime.spawn(server::run(tx, args.addr));
runtime.spawn(server::run(tx.clone(), args.addr));
runtime.spawn(async move {
loop {
let _ = tx.send(Command::draw(BacklogDrawing)).await;
tokio::time::sleep(Duration::from_secs(1)).await;
}
});
println!("Running");
drawer.run()?;