Hasan
Committed by GitHub

fix: re-init UIPrinter cause issues with delegate (#1363)

* fix: re-init UIPrinter cause issues with delegate

* change selectedPrinters to map of URL:UIPrinter
... ... @@ -21,6 +21,10 @@ func dataProviderReleaseDataCallback(info _: UnsafeMutableRawPointer?, data: Uns
data.deallocate()
}
// A variable that holds the selected printers to prevent recreate it if selected again
// Each printer will be identified by its URL string
var selectedPrinters = [String: UIPrinter]()
public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate {
private var printing: PrintingPlugin
public var index: Int
... ... @@ -93,14 +97,19 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate
return
}
let printer = UIPrinter(url: printerURL!)
printer.contactPrinter { available in
let printerURLString = printerURL!.absoluteString
if !selectedPrinters.keys.contains(printerURLString) {
selectedPrinters[printerURLString] = UIPrinter(url: printerURL!)
}
selectedPrinters[printerURLString]!.contactPrinter { available in
if !available {
self.printing.onCompleted(printJob: self, completed: false, error: "Printer not available")
return
}
controller.print(to: printer, completionHandler: self.completionHandler)
controller.print(to: selectedPrinters[printerURLString]!, completionHandler: self.completionHandler)
}
} else {
controller.present(animated: true, completionHandler: self.completionHandler)
... ... @@ -184,8 +193,21 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate
return
}
let printer = UIPrinter(url: printerURL!)
controller.print(to: printer, completionHandler: completionHandler)
let printerURLString = printerURL!.absoluteString
if !selectedPrinters.keys.contains(printerURLString) {
selectedPrinters[printerURLString] = UIPrinter(url: printerURL!)
}
selectedPrinters[printerURLString]!.contactPrinter { available in
if !available {
self.printing.onCompleted(printJob: self, completed: false, error: "Printer not available")
return
}
controller.print(to: selectedPrinters[printerURLString]!, completionHandler: self.completionHandler)
}
return
}
... ...