macOS CI / build-and-test (push) Skipped
Serialise PMPrintSettings/PMPageFormat to XML data plus a plist-safe NSPrintInfo dictionary snapshot (PrintTicket), restore via PM*CreateWithDataRepresentation -> PMCopy* -> PMSessionValidate* -> updateFromPM*, and refuse cross-queue replay (R3). PrintPanelService.showProperties now returns PanelCaptureResult; the view model stores tickets in capturedTickets keyed by queue. Also fixes a latent over-release: PMSessionGetCurrentPrinter hands back the session's own printer (borrowed) — the extracted currentPrinterID was PMRelease-ing it, which dangled the session and crashed AppKit's _printerInPrintSession path and session teardown.
31 lines
1.2 KiB
Swift
31 lines
1.2 KiB
Swift
import Foundation
|
|
import ICCeryCore
|
|
|
|
/// A captured native print ticket (#201) — the payload `lp -o` could
|
|
/// never carry. Vendor PDE state, including opaque binary blobs, is
|
|
/// preserved verbatim inside `printSettings`.
|
|
///
|
|
/// In-memory, session-only. Never written to `settings.json` or an
|
|
/// `.icceryproj` (a ticket is queue- and driver-version-specific).
|
|
struct PrintTicket: Equatable, Sendable {
|
|
/// CUPS queue id this ticket was captured for. Replay onto any other
|
|
/// queue is refused (R3).
|
|
let queue: String
|
|
/// `PMPrintSettingsCreateDataRepresentation(…, kPMDataFormatXMLDefault)`.
|
|
let printSettings: Data
|
|
/// `PMPageFormatCreateDataRepresentation(…, kPMDataFormatXMLDefault)`.
|
|
let pageFormat: Data
|
|
/// Binary-plist snapshot of `NSPrintInfo.dictionary()`, plist-filtered.
|
|
/// Cocoa-level fallback only — never the primary restore path.
|
|
let printInfoPlist: Data?
|
|
let capturedAt: Date
|
|
}
|
|
|
|
/// App-level panel outcome: the ICCeryCore `PrintPropertiesResult`
|
|
/// (Stage 2 mirror values, #183/#186) **plus** the native ticket the
|
|
/// spooler replays (#201).
|
|
struct PanelCaptureResult {
|
|
var properties: PrintPropertiesResult
|
|
var ticket: PrintTicket?
|
|
}
|