tauri-plugin-printer 2.0.3

Tauri V2 Plugin for printer access
Documentation
use tauri::{command, AppHandle, Runtime};

use crate::{
    Error, IdPayload, JobPayload, PrintJob, PrintPdfDataPayload, PrintPdfPayload, PrintResult,
    PrinterCapabilities, PrinterExt, PrinterItem, PrinterNamePayload, Result,
};

async fn blocking<T, F>(task: F) -> Result<T>
where
    T: Send + 'static,
    F: FnOnce() -> Result<T> + Send + 'static,
{
    tauri::async_runtime::spawn_blocking(task)
        .await
        .map_err(|error| Error::CommandFailed(format!("printer task failed: {error}")))?
}

#[command]
pub(crate) async fn get_printers<R: Runtime>(app: AppHandle<R>) -> Result<Vec<PrinterItem>> {
    blocking(move || app.printer().get_printers()).await
}

#[command]
pub(crate) async fn get_printer<R: Runtime>(
    app: AppHandle<R>,
    payload: IdPayload,
) -> Result<PrinterItem> {
    blocking(move || app.printer().get_printer(&payload.value)).await
}

#[command]
pub(crate) async fn get_default_printer<R: Runtime>(
    app: AppHandle<R>,
) -> Result<Option<PrinterItem>> {
    blocking(move || app.printer().get_default_printer()).await
}

#[command]
pub(crate) async fn set_default_printer<R: Runtime>(
    app: AppHandle<R>,
    payload: PrinterNamePayload,
) -> Result<PrinterItem> {
    blocking(move || app.printer().set_default_printer(&payload.printer_name)).await
}

#[command]
pub(crate) async fn get_printer_capabilities<R: Runtime>(
    app: AppHandle<R>,
    payload: PrinterNamePayload,
) -> Result<PrinterCapabilities> {
    blocking(move || {
        app.printer()
            .get_printer_capabilities(&payload.printer_name)
    })
    .await
}

#[command]
pub(crate) async fn get_jobs<R: Runtime>(
    app: AppHandle<R>,
    payload: PrinterNamePayload,
) -> Result<Vec<PrintJob>> {
    blocking(move || app.printer().get_jobs(&payload.printer_name)).await
}

#[command]
pub(crate) async fn get_job<R: Runtime>(
    app: AppHandle<R>,
    payload: JobPayload,
) -> Result<PrintJob> {
    blocking(move || app.printer().get_job(&payload.printer_name, payload.job_id)).await
}

#[command]
pub(crate) async fn resume_job<R: Runtime>(
    app: AppHandle<R>,
    payload: JobPayload,
) -> Result<PrintResult> {
    blocking(move || {
        app.printer()
            .resume_job(&payload.printer_name, payload.job_id)
    })
    .await
}

#[command]
pub(crate) async fn restart_job<R: Runtime>(
    app: AppHandle<R>,
    payload: JobPayload,
) -> Result<PrintResult> {
    blocking(move || {
        app.printer()
            .restart_job(&payload.printer_name, payload.job_id)
    })
    .await
}

#[command]
pub(crate) async fn pause_job<R: Runtime>(
    app: AppHandle<R>,
    payload: JobPayload,
) -> Result<PrintResult> {
    blocking(move || {
        app.printer()
            .pause_job(&payload.printer_name, payload.job_id)
    })
    .await
}

#[command]
pub(crate) async fn remove_job<R: Runtime>(
    app: AppHandle<R>,
    payload: JobPayload,
) -> Result<PrintResult> {
    blocking(move || {
        app.printer()
            .remove_job(&payload.printer_name, payload.job_id)
    })
    .await
}

#[command]
pub(crate) async fn print_pdf<R: Runtime>(
    app: AppHandle<R>,
    payload: PrintPdfPayload,
) -> Result<PrintResult> {
    blocking(move || {
        app.printer().print_pdf(
            payload.printer_name.as_deref(),
            payload.path.as_ref(),
            &payload.settings,
            payload.remove_after_print,
        )
    })
    .await
}

#[command]
pub(crate) async fn print_pdf_data<R: Runtime>(
    app: AppHandle<R>,
    payload: PrintPdfDataPayload,
) -> Result<PrintResult> {
    blocking(move || {
        app.printer().print_pdf_data(
            payload.printer_name.as_deref(),
            &payload.data,
            &payload.settings,
        )
    })
    .await
}