feat(print): add printer descriptions

This commit is contained in:
Elian Doran
2026-04-15 18:33:18 +03:00
parent 6c9ffe1d80
commit 6225f92a7d
2 changed files with 24 additions and 2 deletions

View File

@@ -22,8 +22,19 @@ const DESTINATION_PDF = "__pdf__";
interface PrinterInfo {
name: string;
displayName: string;
description: string;
location: string;
isDefault: boolean;
}
/** Builds the description line shown under a printer in the dropdown. */
function buildPrinterDescription(printer: PrinterInfo): string | undefined {
const parts: string[] = [];
if (printer.isDefault) parts.push(t("print_preview.destination_default"));
if (printer.location) parts.push(printer.location);
else if (printer.description) parts.push(printer.description);
return parts.length ? parts.join(" · ") : undefined;
}
const MARGIN_PRESETS = ["default", "none", "minimum"] as const;
type MarginPreset = typeof MARGIN_PRESETS[number];
@@ -313,7 +324,7 @@ export default function PrintPreviewDialog() {
icon="bx bx-printer"
selected={destination === printer.name}
onClick={() => setDestination(printer.name)}
description={printer.isDefault ? t("print_preview.destination_default") : undefined}
description={buildPrinterDescription(printer)}
>
{printer.displayName || printer.name}
</FormListItem>

View File

@@ -277,7 +277,18 @@ interface PrintFromPreviewOpts extends ExportAsPdfOpts {
electron.ipcMain.handle("get-printers", async (e) => {
try {
return await e.sender.getPrintersAsync();
const printers = await e.sender.getPrintersAsync();
return printers.map((p) => {
// Platform-specific: CUPS uses "printer-location", Windows/mac often expose "location".
const opts = (p.options ?? {}) as Record<string, string>;
return {
name: p.name,
displayName: p.displayName,
description: p.description,
location: opts["printer-location"] || opts.location || "",
isDefault: (p as unknown as { isDefault?: boolean }).isDefault ?? false
};
});
} catch {
return [];
}