def __init__(self, bus, path, cupsconn): bus_name = dbus.service.BusName(CONFIG_BUS, bus=bus) dbus.service.Object.__init__(self, bus_name, path) self.dialog = newprinter.NewPrinterGUI() self.dialog.NewPrinterWindow.set_modal(False) self.handles = [ self.dialog.connect('dialog-canceled', self.on_dialog_canceled), self.dialog.connect('printer-added', self.on_printer_added), self.dialog.connect('printer-modified', self.on_printer_modified), self.dialog.connect('driver-download-checked', self.on_driver_download_checked) ] self._ppdcache = ppdcache.PPDCache() self._cupsconn = cupsconn debugprint("+%s" % self)
def _ppds_ready(self, fetchedppds): if not fetchedppds.is_ready(): # PPDs being reloaded. Wait for next 'ready' signal. return self._disconnect_signals() ppds = fetchedppds.get_ppds() try: if self.device_id: id_dict = cupshelpers.parseDeviceID(self.device_id) else: id_dict = {} (mfg, mdl) = cupshelpers.ppds.ppdMakeModelSplit( self.device_make_and_model) id_dict["MFG"] = mfg id_dict["MDL"] = mdl id_dict["DES"] = "" id_dict["CMD"] = [] self.device_id = "MFG:%s;MDL:%s;" % (mfg, mdl) fit = ppds.getPPDNamesFromDeviceID(id_dict["MFG"], id_dict["MDL"], id_dict["DES"], id_dict["CMD"], self.device_uri, self.device_make_and_model) ppdnamelist = ppds.orderPPDNamesByPreference(fit.keys(), self.installed_files, devid=id_dict, fit=fit) ppdname = ppdnamelist[0] status = fit[ppdname] try: if status != "exact" and not self.download_tried: self.download_tried = True self.dialog = newprinter.NewPrinterGUI() self.dialog.NewPrinterWindow.set_modal(False) self.handles = \ [self.dialog.connect ('dialog-canceled', self.on_dialog_canceled), self.dialog.connect ('driver-download-checked', self.on_driver_download_checked)] self.reply_if_fail = [(x, fit[x]) for x in ppdnamelist] if not self.dialog.init('download_driver', devid=self.device_id): try: g_killtimer.remove_hold() finally: e = RuntimeError("Failed to launch dialog") self.error_handler(r) return except: # Ignore driver download if packages needed for the GUI are not # installed or if no windows can be opened pass g_killtimer.remove_hold() self.reply_handler([(x, fit[x]) for x in ppdnamelist]) except Exception as e: try: g_killtimer.remove_hold() except: pass self.error_handler(e)
def _ppds_ready(self, fetchedppds): self._disconnect_signals() ppds = fetchedppds.get_ppds() try: if self.device_id: id_dict = cupshelpers.parseDeviceID(self.device_id) else: id_dict = {} (mfg, mdl) = cupshelpers.ppds.ppdMakeModelSplit( self.device_make_and_model) id_dict["MFG"] = mfg id_dict["MDL"] = mdl id_dict["DES"] = "" id_dict["CMD"] = [] self.device_id = "MFG:%s;MDL:%s;" % (mfg, mdl) fit = ppds.getPPDNamesFromDeviceID(id_dict["MFG"], id_dict["MDL"], id_dict["DES"], id_dict["CMD"], self.device_uri, self.device_make_and_model) ppdnamelist = ppds.orderPPDNamesByPreference(fit.keys(), self.installed_files, devid=id_dict, fit=fit) ppdname = ppdnamelist[0] status = fit[ppdname] try: if status != "exact" and not self.download_tried: self.download_tried = True self.loop = GObject.MainLoop() self.dialog = newprinter.NewPrinterGUI() self.dialog.NewPrinterWindow.set_modal(False) self.handles = \ [self.dialog.connect ('dialog-canceled', self.on_dialog_canceled), self.dialog.connect ('driver-download-checked', self.on_driver_download_checked)] if self.dialog.init('download_driver', devid=self.device_id): self.loop.run() for handle in self.handles: self.dialog.disconnect(handle) if len(self.installed_files) > 0: debugprint( "GetBestDrivers request: Re-fetch PPDs after driver download" ) g_ppds = FetchedPPDs(self.cupsconn, self.language) self._signals.append( g_ppds.connect('ready', self._ppds_ready)) self._signals.append( g_ppds.connect('error', self._ppds_error)) g_ppds.run() return except: # Ignore driver download if packages needed for the GUI are not # installed or if no windows can be opened pass g_killtimer.remove_hold() self.reply_handler(map(lambda x: (x, fit[x]), ppdnamelist)) except Exception as e: try: g_killtimer.remove_hold() except: pass self.error_handler(e)