def NewPrinter (self, status, name, mfg, mdl, des, cmd): if name.find("/") >= 0: # name is a URI, no queue was generated, because no suitable # driver was found title = _("Missing printer driver") devid = "MFG:%s;MDL:%s;DES:%s;CMD:%s;" % (mfg, mdl, des, cmd) if (mfg and mdl) or des: if (mfg and mdl): device = "%s %s" % (mfg, mdl) else: device = des text = _("No printer driver for %s.") % device else: text = _("No driver for this printer.") n = pynotify.Notification (title, text, 'printer') if "actions" in pynotify.get_server_caps(): n.set_urgency (pynotify.URGENCY_CRITICAL) n.set_timeout (pynotify.EXPIRES_NEVER) n.add_action ("setup-printer", _("Search"), lambda x, y: self.setup_printer (x, y, name, devid)) else: self.setup_printer (None, None, name, devid) else: # name is the name of the queue which hal_lpadmin has set up # automatically. c = cups.Connection () try: printer = c.getPrinters ()[name] except KeyError: return try: filename = c.getPPD (name) except cups.IPPError: return del c # Check for missing packages cups.ppdSetConformance (cups.PPD_CONFORM_RELAXED) ppd = cups.PPD (filename) import os os.unlink (filename) import sys sys.path.append (APPDIR) import cupshelpers (missing_pkgs, missing_exes) = cupshelpers.missingPackagesAndExecutables (ppd) from cupshelpers.ppds import ppdMakeModelSplit (make, model) = ppdMakeModelSplit (printer['printer-make-and-model']) driver = make + " " + model if status < self.STATUS_GENERIC_DRIVER: title = _("Printer added") else: title = _("Missing printer driver") if len (missing_pkgs) > 0: pkgs = reduce (lambda x,y: x + ", " + y, missing_pkgs) title = _("Install printer driver") text = _("`%s' requires driver installation: %s.") % (name, pkgs) n = pynotify.Notification (title, text) import installpackage if "actions" in pynotify.get_server_caps(): try: self.packagekit = installpackage.PackageKit () n.set_timeout (pynotify.EXPIRES_NEVER) n.add_action ("install-driver", _("Install"), lambda x, y: self.install_driver (x, y, missing_pkgs)) except: pass else: try: self.packagekit = installpackage.PackageKit () self.packagekit.InstallPackageName (0, 0, missing_pkgs[0]) except: pass elif status == self.STATUS_SUCCESS: devid = "MFG:%s;MDL:%s;DES:%s;CMD:%s;" % (mfg, mdl, des, cmd) text = _("`%s' is ready for printing.") % name n = pynotify.Notification (title, text) if "actions" in pynotify.get_server_caps(): n.set_urgency (pynotify.URGENCY_NORMAL) n.add_action ("test-page", _("Print test page"), lambda x, y: self.print_test_page (x, y, name)) n.add_action ("configure", _("Configure"), lambda x, y: self.configure (x, y, name)) else: # Model mismatch devid = "MFG:%s;MDL:%s;DES:%s;CMD:%s;" % (mfg, mdl, des, cmd) text = (_("`%s' has been added, using the `%s' driver.") % (name, driver)) n = pynotify.Notification (title, text, 'printer') if "actions" in pynotify.get_server_caps(): n.set_urgency (pynotify.URGENCY_CRITICAL) n.add_action ("test-page", _("Print test page"), lambda x, y: self.print_test_page (x, y, name, devid)) n.add_action ("find-driver", _("Find driver"), lambda x, y: self.find_driver (x, y, name, devid)) n.set_timeout (pynotify.EXPIRES_NEVER) else: self.configure (None, None, name) self.timeout_ready () n.show () self.notification = n
drivers = ppds.orderPPDNamesByPreference (drivers) n_drivers = len (drivers) j = 1 for driver in drivers: if j < n_drivers: print("%s %s %s [%s]" % (more, item, driver, driver_uri_to_pkg (driver))) else: print("%s %s %s [%s]" % (more, last, driver, driver_uri_to_pkg (driver))) j += 1 else: print("%s (No drivers)" % more) (mfr, mdl) = ppdMakeModelSplit (make_and_model) matches = set (ppds.getInfoFromModel (mfr, mdl)) mfrl = mfr.lower () mdls = None for make in makes: if make.lower () == mfrl: mdls = ppds.makes[make] break if mdls: (s, bestmatches) = ppds._findBestMatchPPDs (mdls, mdl) if s == ppds.FIT_EXACT: matches = matches.union (set (bestmatches)) missing = set (matches) - set (drivers) for each in missing: try:
def NewPrinter (self, status, name, mfg, mdl, des, cmd): if name.find("/") >= 0: # name is a URI, no queue was generated, because no suitable # driver was found title = _("Missing printer driver") devid = "MFG:%s;MDL:%s;DES:%s;CMD:%s;" % (mfg, mdl, des, cmd) if (mfg and mdl) or des: if (mfg and mdl): device = "%s %s" % (mfg, mdl) else: device = des text = _("No printer driver for %s.") % device else: text = _("No driver for this printer.") n = Notify.Notification.new (title, text, 'printer') if "actions" in Notify.get_server_caps(): n.set_urgency (Notify.Urgency.CRITICAL) n.set_timeout (Notify.EXPIRES_NEVER) n.add_action ("setup-printer", _("Search"), lambda x, y: self.setup_printer (x, y, name, devid)) else: self.setup_printer (None, None, name, devid) else: # name is the name of the queue which hal_lpadmin has set up # automatically. c = cups.Connection () try: printer = c.getPrinters ()[name] except KeyError: return try: filename = c.getPPD (name) except cups.IPPError: return del c # Check for missing packages cups.ppdSetConformance (cups.PPD_CONFORM_RELAXED) ppd = cups.PPD (filename) import os os.unlink (filename) import sys sys.path.append (APPDIR) import cupshelpers (missing_pkgs, missing_exes) = cupshelpers.missingPackagesAndExecutables (ppd) from cupshelpers.ppds import ppdMakeModelSplit (make, model) = ppdMakeModelSplit (printer['printer-make-and-model']) driver = make + " " + model if status < self.STATUS_GENERIC_DRIVER: title = _("Printer added") else: title = _("Missing printer driver") if len (missing_pkgs) > 0: pkgs = reduce (lambda x,y: x + ", " + y, missing_pkgs) title = _("Install printer driver") text = (_("`%s' requires driver installation: %s.") % (name, pkgs)) n = Notify.Notification.new (title, text, 'printer') import installpackage if "actions" in Notify.get_server_caps(): try: self.packagekit = installpackage.PackageKit () n.set_timeout (Notify.EXPIRES_NEVER) n.add_action ("install-driver", _("Install"), lambda x, y: self.install_driver (x, y, missing_pkgs)) except: pass else: try: self.packagekit = installpackage.PackageKit () self.packagekit.InstallPackageName (0, 0, missing_pkgs[0]) except: pass elif status == self.STATUS_SUCCESS: devid = "MFG:%s;MDL:%s;DES:%s;CMD:%s;" % (mfg, mdl, des, cmd) text = _("`%s' is ready for printing.") % name n = Notify.Notification.new (title, text, 'printer') if "actions" in Notify.get_server_caps(): n.set_urgency (Notify.Urgency.NORMAL) n.add_action ("test-page", _("Print test page"), lambda x, y: self.print_test_page (x, y, name)) n.add_action ("configure", _("Configure"), lambda x, y: self.configure (x, y, name)) else: # Model mismatch devid = "MFG:%s;MDL:%s;DES:%s;CMD:%s;" % (mfg, mdl, des, cmd) text = (_("`%s' has been added, using the `%s' driver.") % (name, driver)) n = Notify.Notification.new (title, text, 'printer') if "actions" in Notify.get_server_caps(): n.set_urgency (Notify.Urgency.CRITICAL) n.add_action ("test-page", _("Print test page"), lambda x, y: self.print_test_page (x, y, name, devid)) n.add_action ("find-driver", _("Find driver"), lambda x, y: self.find_driver (x, y, name, devid)) n.set_timeout (Notify.EXPIRES_NEVER) else: self.configure (None, None, name) self.timeout_ready () n.show () self.notification = n
drivers = ppds.orderPPDNamesByPreference (drivers) n_drivers = len (drivers) j = 1 for driver in drivers: if j < n_drivers: print "%s %s %s [%s]" % (more, item, driver, driver_uri_to_pkg (driver)) else: print "%s %s %s [%s]" % (more, last, driver, driver_uri_to_pkg (driver)) j += 1 else: print "%s (No drivers)" % more (mfr, mdl) = ppdMakeModelSplit (make_and_model) matches = set (ppds.getInfoFromModel (mfr, mdl)) mfrl = mfr.lower () mdls = None for make in makes: if make.lower () == mfrl: mdls = ppds.makes[make] break if mdls: (s, bestmatches) = ppds._findBestMatchPPDs (mdls, mdl) if s == ppds.FIT_EXACT: matches = matches.union (set (bestmatches)) missing = set (matches) - set (drivers) for each in missing: try: