def NextButton_clicked(self): p = self.StackedWidget.currentIndex() if p == PAGE_INTRO: self.showDevicesPage() elif p == PAGE_DEVICES: row = self.DevicesTableWidget.currentRow() if row != -1: self.device_uri = self.DevicesTableWidget.item(row, 0).device_uri self.mq = device.queryModelByURI(self.device_uri) self.getWifiObject(self.mq['wifi-config']) back_end, is_hp, bus, model, serial, dev_file, host, zc, port = device.parseDeviceURI(self.device_uri) self.model = models.normalizeModelName(model).lower() self.showNetworkPage() elif p == PAGE_NETWORK: self.security = 'None' self.mode = 'Infrastructure' self.ss = 0 row = self.NetworksTableWidget.currentRow() if row != -1: i = self.NetworksTableWidget.item(row, 0) if i is not None: self.network = to_unicode(i.text()) log.debug("Selected network SSID: %s" % self.network) self.n, ok = value_int(i.data(Qt.UserRole)) if ok: self.security = self.networks['encryptiontype-%d' % self.n] log.debug("Security: %s" % self.security) self.mode = self.networks['communicationmode-%d' % self.n] log.debug("Mode: %s" % self.mode) self.ss = self.networks['signalstrength-%d' % self.n] log.debug("Signal strength: %s" % self.ss) if self.security.lower() != 'none': self.showConfigWifiPage() else: # Skip config page if no security to setup self.associate() self.showAssociateProgressDialog() self.showExitPage() elif p == PAGE_CONFIGURE_WIFI: key = to_unicode(self.KeyLineEdit.text()) self.associate(key) self.showAssociateProgressDialog() self.showExitPage() elif p == PAGE_EXIT: if self.dev is not None: self.dev.close() self.close() else: log.error("Invalid page!") # shouldn't happen!
def DeviceUriComboBox_currentChanged(self, device_uri): beginWaitCursor() try: self.device_uri = device_uri if self.dev is not None: self.dev.close() self.dev = device.Device(self.device_uri) # Update self.mq = device.queryModelByURI(self.device_uri) self.power_settings = self.mq.get('power-settings', POWER_SETTINGS_NONE) self.TabWidget.setTabEnabled( TAB_POWER_SETTINGS, self.power_settings != POWER_SETTINGS_NONE) if self.power_settings == POWER_SETTINGS_EPML: self.updatePowerSettingsEPML() elif self.power_settings == POWER_SETTINGS_PML: self.updatePowerSettingsPML() finally: endWaitCursor()
def updateModelQuery(self, item): if not item.mq: item.mq = device.queryModelByURI(self.device_uri) self.mq = item.mq else: self.mq = item.mq log.debug(self.mq)
def actionPushButton_clicked(self): if self.path: # path if not self.path.startswith('http://'): self.path = 'file://' + self.path else: log.info("Checking for network connection...") ok = utils.check_network_connection() if not ok: log.error("Network connection not detected.") self.FailureUI(self.__tr("Network connection not detected.")) self.close() return log.info("Downloading plug-in from: %s" % self.path) status, self.path, error_str = self.pluginObj.download( self.path, self.plugin_download_callback) if status != ERROR_SUCCESS: self.pluginObj.deleteInstallationFiles(self.path) self.FailureUI(error_str) self.close() return if not self.pluginObj.run_plugin(self.path, GUI_MODE): self.pluginObj.deleteInstallationFiles(self.path) self.FailureUI(self.__tr("Plug-in install failed.")) self.close() return cups_devices = device.getSupportedCUPSDevices(['hp']) #, 'hpfax']) for dev in cups_devices: mq = device.queryModelByURI(dev) if mq.get('fw-download', False): # Download firmware if needed log.info( log.bold("\nDownloading firmware to device %s..." % dev)) try: d = device.Device(dev) except Error: log.error("Error opening device.") continue if d.downloadFirmware(): log.info("Firmware download successful.\n") d.close() self.pluginObj.deleteInstallationFiles(self.path) self.SuccessUI("Plug-in install successful") self.close()
def actionPushButton_clicked(self): if self.path: # path if not self.path.startswith('http://'): self.path = 'file://' + self.path else: log.info("Checking for network connection...") ok = utils.check_network_connection() if not ok: log.error("Network connection not detected.") self.FailureUI(self.__tr("Network connection not detected.")) self.close() return log.info("Downloading plug-in from: %s" % self.path) status, self.path, error_str = self.pluginObj.download(self.path, self.plugin_download_callback) if status != ERROR_SUCCESS: self.pluginObj.deleteInstallationFiles(self.path) self.FailureUI(error_str) self.close() return if not self.pluginObj.run_plugin(self.path, GUI_MODE): self.pluginObj.deleteInstallationFiles(self.path) self.FailureUI(self.__tr("Plug-in install failed.")) self.close() return cups_devices = device.getSupportedCUPSDevices(['hp']) #, 'hpfax']) for dev in cups_devices: mq = device.queryModelByURI(dev) if mq.get('fw-download', False): # Download firmware if needed log.info(log.bold("\nDownloading firmware to device %s..." % dev)) try: d = device.Device(dev) except Error: log.error("Error opening device.") continue if d.downloadFirmware(): log.info("Firmware download successful.\n") d.close() self.pluginObj.deleteInstallationFiles(self.path) self.SuccessUI("Plug-in install successful") self.close()
def NextButton_clicked(self): p = self.StackedWidget.currentIndex() if p == PAGE_DISCOVERY: self.manual = self.ManualGroupBox.isChecked() self.param = unicode(self.ManualParamLineEdit.text()) self.jd_port = self.JetDirectSpinBox.value() self.search = unicode(self.SearchLineEdit.text()) self.device_desc = int(self.DeviceTypeComboBox.itemData(self.DeviceTypeComboBox.currentIndex()).toInt()[0]) self.discovery_method = self.NetworkDiscoveryMethodComboBox.currentIndex() if self.WirelessButton.isChecked(): dlg = WifiSetupDialog(self, device_uri=None, standalone=False) dlg.exec_() if dlg.success == SUCCESS_CONNECTED: self.manual = True self.param = dlg.hn self.bus = 'net' if not self.WirelessButton.isChecked(): self.showDevicesPage() elif p == PAGE_DEVICES: row = self.DevicesTableWidget.currentRow() self.device_uri = self.DevicesTableWidget.item(row, 0).device_uri self.mq = device.queryModelByURI(self.device_uri) back_end, is_hp, bus, model, serial, dev_file, host, zc, port = device.parseDeviceURI(self.device_uri) self.model = models.normalizeModelName(model).lower() self.showAddPrinterPage() elif p == PAGE_ADD_PRINTER: self.print_test_page = self.SendTestPageCheckBox.isChecked() self.print_desc = unicode(self.PrinterDescriptionLineEdit.text()).encode('utf8') self.print_location = unicode(self.PrinterLocationLineEdit.text()).encode('utf8') self.fax_setup = self.SetupFaxGroupBox.isChecked() self.fax_desc = unicode(self.FaxDescriptionLineEdit.text()).encode('utf8') self.fax_location = unicode(self.FaxLocationLineEdit.text()).encode('utf8') self.fax_name_company = unicode(self.NameCompanyLineEdit.text()).encode('utf8') self.fax_number = unicode(self.FaxNumberLineEdit.text()).encode('utf8') self.addPrinter() elif p == PAGE_REMOVE: for row in xrange(self.RemoveDevicesTableWidget.rowCount()): widget = self.RemoveDevicesTableWidget.cellWidget(row, 0) if widget.checkState() == Qt.Checked: item = self.RemoveDevicesTableWidget.item(row, 1) printer = unicode(item.data(Qt.UserRole).toString()).encode('utf-8') log.debug("Removing printer: %s" % printer) if cups.delPrinter(printer) == 0 and os.geteuid!=0 and utils.addgroup()!=[]: FailureUI(self, self.__tr("<b>Unable to delete printer queue. Could not connect to CUPS Server</b><p>Is user added to %s group(s)" %utils.list_to_string(utils.addgroup()))) self.close() else: log.error("Invalid page!") # shouldn't happen!
def endStartPage(self): self.mq = device.queryModelByURI(self.device_uri) self.clean_type = self.mq.get('clean-type', CLEAN_TYPE_NONE) self.seq_index = -1 log.debug("clean-type=%d" % self.clean_type) self.step_max = self.max_steps[self.clean_type] try: self.dev = device.Device(self.device_uri) except Error: CheckDeviceUI(self) return
def getFaxDevice(device_uri=None, printer_name=None, callback=None, fax_type=FAX_TYPE_NONE, disable_dbus=False): if fax_type == FAX_TYPE_NONE: if device_uri is None and printer_name is not None: printers = cups.getPrinters() for p in printers: if p.name.lower() == printer_name.lower(): device_uri = p.device_uri break else: raise Error(ERROR_DEVICE_NOT_FOUND) if device_uri is not None: mq = device.queryModelByURI(device_uri) fax_type = mq['fax-type'] log.debug("fax-type=%d" % fax_type) if fax_type in (FAX_TYPE_BLACK_SEND_EARLY_OPEN, FAX_TYPE_BLACK_SEND_LATE_OPEN): from pmlfax import PMLFaxDevice return PMLFaxDevice(device_uri, printer_name, callback, fax_type, disable_dbus) elif fax_type == FAX_TYPE_SOAP: from soapfax import SOAPFaxDevice return SOAPFaxDevice(device_uri, printer_name, callback, fax_type, disable_dbus) elif fax_type == FAX_TYPE_LEDMSOAP: from ledmsoapfax import LEDMSOAPFaxDevice return LEDMSOAPFaxDevice(device_uri, printer_name, callback, fax_type, disable_dbus) elif fax_type == FAX_TYPE_MARVELL: from marvellfax import MarvellFaxDevice return MarvellFaxDevice(device_uri, printer_name, callback, fax_type, disable_dbus) elif fax_type == FAX_TYPE_LEDM: from ledmfax import LEDMFaxDevice return LEDMFaxDevice(device_uri, printer_name, callback, fax_type, disable_dbus) else: raise Error(ERROR_DEVICE_DOES_NOT_SUPPORT_OPERATION)
def endStartPage(self): self.mq = device.queryModelByURI(self.device_uri) self.align_type = self.mq.get('align-type', ALIGN_TYPE_NONE) self.seq_index = -1 #self.align_type = ALIGN_TYPE_TEST# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX log.debug("align-type=%d" % self.align_type) self.step_max = self.max_steps[self.align_type] try: self.dev = device.Device(self.device_uri) except Error: CheckDeviceUI(self) return
def endStartPage(self): self.mq = device.queryModelByURI(self.device_uri) self.color_cal_type = self.mq.get('color-cal-type', COLOR_CAL_TYPE_NONE) self.seq_index = -1 #self.color_cal_type = COLOR_CAL_TYPE_TEST # XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX log.debug("color-cal-type=%d" % self.color_cal_type) self.step_max = self.max_steps[self.color_cal_type] try: self.dev = device.Device(self.device_uri) except Error: CheckDeviceUI(self) return
def getFaxDevice(device_uri=None, printer_name=None, callback=None, fax_type=FAX_TYPE_NONE, disable_dbus=False): if fax_type == FAX_TYPE_NONE: if device_uri is None and printer_name is not None: printers = cups.getPrinters() for p in printers: if p.name.lower() == printer_name.lower(): device_uri = p.device_uri break else: raise Error(ERROR_DEVICE_NOT_FOUND) if device_uri is not None: mq = device.queryModelByURI(device_uri) fax_type = mq["fax-type"] log.debug("fax-type=%d" % fax_type) if fax_type in (FAX_TYPE_BLACK_SEND_EARLY_OPEN, FAX_TYPE_BLACK_SEND_LATE_OPEN): from .pmlfax import PMLFaxDevice return PMLFaxDevice(device_uri, printer_name, callback, fax_type, disable_dbus) elif fax_type == FAX_TYPE_SOAP: from .soapfax import SOAPFaxDevice return SOAPFaxDevice(device_uri, printer_name, callback, fax_type, disable_dbus) elif fax_type == FAX_TYPE_LEDMSOAP: from .ledmsoapfax import LEDMSOAPFaxDevice return LEDMSOAPFaxDevice(device_uri, printer_name, callback, fax_type, disable_dbus) elif fax_type == FAX_TYPE_MARVELL: from .marvellfax import MarvellFaxDevice return MarvellFaxDevice(device_uri, printer_name, callback, fax_type, disable_dbus) elif fax_type == FAX_TYPE_LEDM: from .ledmfax import LEDMFaxDevice return LEDMFaxDevice(device_uri, printer_name, callback, fax_type, disable_dbus) else: raise Error(ERROR_DEVICE_DOES_NOT_SUPPORT_OPERATION)
def __init__(self, device_uri, needs_update=True): self.needs_update = needs_update self.device_uri = device_uri back_end, is_hp, bus, model, serial, dev_file, host, zc, port = \ device.parseDeviceURI(device_uri) if bus == 'usb': self.id = serial elif bus == 'net': self.id = host elif bus == 'par': self.id = dev_file else: self.id = 'unknown' self.model = models.normalizeModelUIName(model) if back_end == 'hp': self.device_type = DEVICE_TYPE_PRINTER self.menu_text = self.__tr("%1 Printer (%2)").arg(self.model).arg( self.id) elif back_end == 'hpaio': self.device_type = DEVICE_TYPE_SCANNER self.menu_text = self.__tr("%1 Scanner (%2)").arg(self.model).arg( self.id) elif back_end == 'hpfax': self.device_type = DEVICE_TYPE_FAX self.menu_text = self.__tr("%1 Fax (%2)").arg(self.model).arg( self.id) else: self.device_type = DEVICE_TYPE_UNKNOWN self.menu_text = self.__tr("%1 (%2)").arg(self.model).arg(self.id) self.mq = device.queryModelByURI(self.device_uri) self.index = 0 if self.mq.get('tech-type', TECH_TYPE_NONE) in (TECH_TYPE_MONO_LASER, TECH_TYPE_COLOR_LASER): self.index = 1 self.history = None
def __init__(self, device_uri, needs_update=True): self.needs_update = needs_update self.device_uri = device_uri back_end, is_hp, bus, model, serial, dev_file, host, zc, port = \ device.parseDeviceURI(device_uri) if bus == 'usb': self.id = serial elif bus == 'net': self.id = host elif bus == 'par': self.id = dev_file else: self.id = 'unknown' self.model = models.normalizeModelUIName(model) if back_end == 'hp': self.device_type = DEVICE_TYPE_PRINTER self.menu_text = self.__tr("%1 Printer (%2)").arg(self.model).arg(self.id) elif back_end == 'hpaio': self.device_type = DEVICE_TYPE_SCANNER self.menu_text = self.__tr("%1 Scanner (%2)").arg(self.model).arg(self.id) elif back_end == 'hpfax': self.device_type = DEVICE_TYPE_FAX self.menu_text = self.__tr("%1 Fax (%2)").arg(self.model).arg(self.id) else: self.device_type = DEVICE_TYPE_UNKNOWN self.menu_text = self.__tr("%1 (%2)").arg(self.model).arg(self.id) self.mq = device.queryModelByURI(self.device_uri) self.index = 0 if self.mq.get('tech-type', TECH_TYPE_NONE) in (TECH_TYPE_MONO_LASER, TECH_TYPE_COLOR_LASER): self.index = 1 self.history = None
def DeviceUriComboBox_currentChanged(self, device_uri): beginWaitCursor() try: self.device_uri = device_uri if self.dev is not None: self.dev.close() self.dev = device.Device(self.device_uri) # Update self.mq = device.queryModelByURI(self.device_uri) self.power_settings = self.mq.get('power-settings', POWER_SETTINGS_NONE) self.TabWidget.setTabEnabled(TAB_POWER_SETTINGS, self.power_settings != POWER_SETTINGS_NONE) if self.power_settings == POWER_SETTINGS_EPML: self.updatePowerSettingsEPML() elif self.power_settings == POWER_SETTINGS_PML: self.updatePowerSettingsPML() finally: endWaitCursor()
def actionPushButton_clicked(self): core = core_install.CoreInstall() core.set_plugin_version() #self.version) if self.path is None: # download # read plugin.conf (local or on sf.net) to get plugin_path (http://) plugin_conf_url = core.get_plugin_conf_url() if plugin_conf_url.startswith('file://'): pass else: pass log.info("Checking for network connection...") ok = core.check_network_connection() if not ok: log.error("Network connection not detected.") self.FailureUI(self.__tr("Network connection not detected.")) self.close() return log.info("Downloading configuration file from: %s" % plugin_conf_url) self.path, size, checksum, timestamp, ok = core.get_plugin_info(plugin_conf_url, self.plugin_download_callback) log.debug("path=%s, size=%d, checksum=%s, timestamp=%f, ok=%s" % (self.path, size, checksum, timestamp, ok)) if not self.path.startswith('http://') and not self.path.startswith('file://'): self.path = 'file://' + self.path else: # path if not self.path.startswith('http://'): self.path = 'file://' + self.path size, checksum, timestamp = 0, '', 0 if self.path.startswith('file://'): pass else: log.info("Checking for network connection...") ok = core.check_network_connection() if not ok: log.error("Network connection not detected.") self.FailureUI(self.__tr("Network connection not detected.")) self.close() return log.info("Downloading plug-in from: %s" % self.path) status, ret = core.download_plugin(self.path, size, checksum, timestamp, self.plugin_download_callback) if status != PLUGIN_INSTALL_ERROR_NONE: if status == PLUGIN_INSTALL_ERROR_PLUGIN_FILE_NOT_FOUND: desc = self.__tr("<b>ERROR: Plug-in file not found (server returned 404 or similar error).</b><p>Error code: %1</p>").arg(str(ret)) elif status == PLUGIN_INSTALL_ERROR_DIGITAL_SIG_NOT_FOUND: desc = self.__tr("<b>ERROR: Plug-in digital signature file not found (server returned 404 or similar error).</b><p>Error code: %1</p>").arg(str(ret)) elif status == PLUGIN_INSTALL_ERROR_DIGITAL_SIG_BAD: desc = self.__tr("<b>ERROR: Plug-in file does not match its digital signature.</b><p>File may have been corrupted or altered.</p><p>Error code: %1</p>").arg(str(ret)) elif status == PLUGIN_INSTALL_ERROR_PLUGIN_FILE_CHECKSUM_ERROR: desc = self.__tr("<b>ERROR: Plug-in file does not match its checksum. File may have been corrupted or altered.") elif status == PLUGIN_INSTALL_ERROR_NO_NETWORK: desc = self.__tr("<b>ERROR: Unable to connect to network to download the plug-in.</b><p>Please check your network connection and try again.</p>") elif status == PLUGIN_INSTALL_ERROR_DIRECTORY_ERROR: desc = self.__tr("<b>ERROR: Unable to create the plug-in directory.</b><p>Please check your permissions and try again.</p>") elif status == PLUGIN_INSTALL_ERROR_UNABLE_TO_RECV_KEYS: desc = self.__tr("<b>ERROR: Unable to download the public HPLIP keys from the keyserver.</b><p>Error code: %1</p>").arg(str(ret)) core.delete_plugin() self.FailureUI(desc) self.close() return local_plugin = ret if not core.run_plugin(GUI_MODE, self.plugin_install_callback): core.delete_plugin() self.FailureUI(self.__tr("Plug-in install failed.")) self.close() return cups_devices = device.getSupportedCUPSDevices(['hp']) #, 'hpfax']) for dev in cups_devices: mq = device.queryModelByURI(dev) if mq.get('fw-download', False): # Download firmware if needed log.info(log.bold("\nDownloading firmware to device %s..." % dev)) try: d = device.Device(dev) except Error: log.error("Error opening device.") continue if d.downloadFirmware(): log.info("Firmware download successful.\n") d.close() core.delete_plugin() self.SuccessUI("Plug-in install successful.") self.close()
def showPage(self, page): orig_page = page if self.first_page: page = self.start_page self.first_page = False log.debug("%s %s %s" % ("*"*20, "showPage(%s)" % page.name(), "*"*20)) try: log.debug("%s --> %s" % (self.prev_page.name(), page.name())) except AttributeError: log.debug("--> %s" % page.name()) if page is self.ConnectionPage: # start --> ConnectionPage pass elif page is self.ProbedDevicesPage: # ConnectionPage --> ProbedDevicesPage/EnterIPPage/DeviceNotFoundPage devices_found = self.updateProbedDevicesPage() elif page is self.PPDPage: # ProbedDevicesPage --> PPDPage if self.param: device_uri, sane_uri, fax_uri = device.makeURI(self.param, self.jd_port) if device_uri: self.device_uri = device_uri back_end, is_hp, bus, model, serial, dev_file, host, zc, port = \ device.parseDeviceURI(self.device_uri) self.bus = bus self.mq = device.queryModelByURI(self.device_uri) norm_model = models.normalizeModelName(model).lower() core = core_install.CoreInstall() core.set_plugin_version() plugin = self.mq.get('plugin', PLUGIN_NONE) plugin_reason = self.mq.get('plugin-reason', PLUGIN_REASON_NONE) if plugin > PLUGIN_NONE and not core.check_for_plugin(): ok, sudo_ok = pkit.run_plugin_command(plugin == PLUGIN_REQUIRED, plugin_reason) if not sudo_ok: self.FailureUI(self.__tr("<b>Unable to find an appropriate su/sudo utility to run hp-plugin.</b><p>Install kdesu, gnomesu, or gksu.</p>")) return if not ok or not core.check_for_plugin(): if plugin == PLUGIN_REQUIRED: self.FailureUI(self.__tr("<b>The printer you are trying to setup requires a binary driver plug-in and it failed to install.</b><p>Please check your internet connection and try again.</p><p>Visit <u>http://hplipopensource.com</u> for more information.</p>")) return else: self.WarningUI(self.__tr("Either you have chosen to skip the installation of the optional plug-in or that installation has failed. Your printer may not function at optimal performance.")) self.updatePPDPage() elif page is self.PrinterNamePage: self.setDefaultPrinterName() if fax_import_ok and prop.fax_build and \ self.mq.get('fax-type', FAX_TYPE_NONE) not in (FAX_TYPE_NONE, FAX_TYPE_NOT_SUPPORTED): self.faxCheckBox.setEnabled(True) self.faxCheckBox.setEnabled(True) self.faxNameLineEdit.setEnabled(True) self.faxNumberLineEdit.setEnabled(True) self.faxNameCoLineEdit.setEnabled(True) self.faxLocationLineEdit.setEnabled(True) self.faxDescriptionLineEdit.setEnabled(True) self.faxInfoGroupBox.setEnabled(True) self.setup_fax = True self.setDefaultFaxName() self.readwriteFaxInformation(True) else: self.setup_fax = False self.fax_name_ok = True self.defaultFaxNamePushButton.setEnabled(False) self.faxCheckBox.setEnabled(False) self.faxNameLineEdit.setEnabled(False) self.faxNumberLineEdit.setEnabled(False) self.faxNameCoLineEdit.setEnabled(False) self.faxLocationLineEdit.setEnabled(False) self.faxDescriptionLineEdit.setEnabled(False) self.faxInfoGroupBox.setEnabled(False) elif page is self.FinishedPage: self.lineEdit1.setText(self.printer_name) self.lineEdit2.setText(self.location) self.lineEdit3.setText(self.desc) self.lineEdit4.setText(self.ppd_file) #log.debug("Restarting CUPS...") #status, output = utils.run(restart_cups()) #log.debug("Restart CUPS returned: exit=%d output=%s" % (status, output)) self.setupPrinter() if self.setup_fax: self.setupFax() self.readwriteFaxInformation(False) self.lineEdit5.setText(self.fax_number) self.lineEdit6.setText(self.fax_name) self.lineEdit7.setText(self.fax_name_company) self.lineEdit8.setText(self.fax_location) self.lineEdit9.setText(self.fax_desc) self.faxGroupBox.setEnabled(True) else: self.faxGroupBox.setEnabled(False) self.setFinishEnabled(self.FinishedPage, True) if orig_page != page: try: log.debug("%s --> %s" % (self.prev_page.name(), page.name())) except AttributeError: log.debug("--> %s" % page.name()) self.prev_page = page QWizard.showPage(self, page) if page is self.ProbedDevicesPage: # ConnectionPage --> ProbedDevicesPage/EnterIPPage/DeviceNotFoundPage if not devices_found: self.FailureUI(self.__tr("<b>No devices found.</b><p>Please make sure your printer is properly connected and powered-on."))
def NextButton_clicked(self): if self.SkipRadioButton.isChecked(): log.debug("Skipping plug-in installation.") self.close() return beginWaitCursor() try: if self.plugin_path is None: # download # read plugin.conf (local or on sf.net) to get plugin_path (http://) plugin_conf_url = self.core.get_plugin_conf_url() if plugin_conf_url.startswith('file://'): pass else: log.info("Checking for network connection...") ok = self.core.check_network_connection() if not ok: log.error("Network connection not detected.") endWaitCursor() FailureUI(self, self.__tr("Network connection not detected.")) self.close() return log.info("Downloading configuration file from: %s" % plugin_conf_url) self.plugin_path, size, checksum, timestamp, ok = self.core.get_plugin_info(plugin_conf_url, self.plugin_download_callback) log.debug("path=%s, size=%d, checksum=%s, timestamp=%f, ok=%s" % (self.plugin_path, size, checksum, timestamp, ok)) if not self.plugin_path.startswith('http://') and not self.plugin_path.startswith('file://'): self.plugin_path = 'file://' + self.plugin_path else: # path if not self.plugin_path.startswith('http://'): self.plugin_path = 'file://' + self.plugin_path size, checksum, timestamp = 0, '', 0 if self.plugin_path.startswith('file://'): pass else: log.info("Checking for network connection...") ok = self.core.check_network_connection() if not ok: log.error("Network connection not detected.") endWaitCursor() FailureUI(self, self.__tr("Network connection not detected.")) self.close() return log.info("Downloading plug-in from: %s" % self.plugin_path) status, ret = self.core.download_plugin(self.plugin_path, size, checksum, timestamp, self.plugin_download_callback) if status in (PLUGIN_INSTALL_ERROR_UNABLE_TO_RECV_KEYS, PLUGIN_INSTALL_ERROR_DIGITAL_SIG_NOT_FOUND): endWaitCursor() if QMessageBox.question(self, self.__tr("Digital signature download failed"), self.__tr("<b>The download of the digital signature file failed.</b><p>Without this file, it is not possible to authenticate and validate the plug-in prior to installation.</p>Do you still want to install the plug-in?"), QMessageBox.Yes | QMessageBox.No) != QMessageBox.Yes: self.core.delete_plugin() self.close() return elif status != PLUGIN_INSTALL_ERROR_NONE: if status == PLUGIN_INSTALL_ERROR_PLUGIN_FILE_NOT_FOUND: desc = self.__tr("<b>ERROR: Plug-in file not found (server returned 404 or similar error).</b><p>Error code: %1</p>").arg(str(ret)) elif status == PLUGIN_INSTALL_ERROR_DIGITAL_SIG_BAD: desc = self.__tr("<b>ERROR: Plug-in file does not match its digital signature.</b><p>File may have been corrupted or altered.</p><p>Error code: %1</p>").arg(str(ret)) elif status == PLUGIN_INSTALL_ERROR_PLUGIN_FILE_CHECKSUM_ERROR: desc = self.__tr("<b>ERROR: Plug-in file does not match its checksum. File may have been corrupted or altered.") elif status == PLUGIN_INSTALL_ERROR_NO_NETWORK: desc = self.__tr("<b>ERROR: Unable to connect to network to download the plug-in.</b><p>Please check your network connection and try again.</p>") elif status == PLUGIN_INSTALL_ERROR_DIRECTORY_ERROR: desc = self.__tr("<b>ERROR: Unable to create the plug-in directory.</b><p>Please check your permissions and try again.</p>") self.core.delete_plugin() endWaitCursor() FailureUI(self, desc) self.close() return if not self.core.run_plugin(GUI_MODE, self.plugin_install_callback): self.core.delete_plugin() endWaitCursor() FailureUI(self, self.__tr("Plug-in install failed.")) self.close() return cups_devices = device.getSupportedCUPSDevices(['hp']) for dev in cups_devices: mq = device.queryModelByURI(dev) if mq.get('fw-download', False): # Download firmware if needed log.info(log.bold("\nDownloading firmware to device %s..." % dev)) try: d = None try: d = device.Device(dev) except Error: log.error("Error opening device.") endWaitCursor() FailureUI(self, self.__tr("<b>Firmware download to device failed.</b><p>%1</p>").arg(dev)) continue if d.downloadFirmware(): log.info("Firmware download successful.\n") else: endWaitCursor() FailureUI(self, self.__tr("<b>Firmware download to device failed.</b><p>%1</p>").arg(dev)) finally: if d is not None: d.close() finally: endWaitCursor() self.core.delete_plugin() SuccessUI(self, self.__tr("<b>Plug-in installation successful.</b>")) self.result = True self.close()
def actionPushButton_clicked(self): core = core_install.CoreInstall() core.set_plugin_version() #self.version) if self.path is None: # download # read plugin.conf (local or on sf.net) to get plugin_path (http://) plugin_conf_url = core.get_plugin_conf_url() if plugin_conf_url.startswith('file://'): pass else: pass log.info("Checking for network connection...") ok = core.check_network_connection() if not ok: log.error("Network connection not detected.") self.FailureUI( self.__tr("Network connection not detected.")) self.close() return log.info("Downloading configuration file from: %s" % plugin_conf_url) self.path, size, checksum, timestamp, ok = core.get_plugin_info( plugin_conf_url, self.plugin_download_callback) log.debug("path=%s, size=%d, checksum=%s, timestamp=%f, ok=%s" % (self.path, size, checksum, timestamp, ok)) if not self.path.startswith( 'http://') and not self.path.startswith('file://'): self.path = 'file://' + self.path else: # path if not self.path.startswith('http://'): self.path = 'file://' + self.path size, checksum, timestamp = 0, '', 0 if self.path.startswith('file://'): pass else: log.info("Checking for network connection...") ok = core.check_network_connection() if not ok: log.error("Network connection not detected.") self.FailureUI(self.__tr("Network connection not detected.")) self.close() return log.info("Downloading plug-in from: %s" % self.path) status, ret = core.download_plugin(self.path, size, checksum, timestamp, self.plugin_download_callback) if status != PLUGIN_INSTALL_ERROR_NONE: if status == PLUGIN_INSTALL_ERROR_PLUGIN_FILE_NOT_FOUND: desc = self.__tr( "<b>ERROR: Plug-in file not found (server returned 404 or similar error).</b><p>Error code: %1</p>" ).arg(str(ret)) elif status == PLUGIN_INSTALL_ERROR_DIGITAL_SIG_NOT_FOUND: desc = self.__tr( "<b>ERROR: Plug-in digital signature file not found (server returned 404 or similar error).</b><p>Error code: %1</p>" ).arg(str(ret)) elif status == PLUGIN_INSTALL_ERROR_DIGITAL_SIG_BAD: desc = self.__tr( "<b>ERROR: Plug-in file does not match its digital signature.</b><p>File may have been corrupted or altered.</p><p>Error code: %1</p>" ).arg(str(ret)) elif status == PLUGIN_INSTALL_ERROR_PLUGIN_FILE_CHECKSUM_ERROR: desc = self.__tr( "<b>ERROR: Plug-in file does not match its checksum. File may have been corrupted or altered." ) elif status == PLUGIN_INSTALL_ERROR_NO_NETWORK: desc = self.__tr( "<b>ERROR: Unable to connect to network to download the plug-in.</b><p>Please check your network connection and try again.</p>" ) elif status == PLUGIN_INSTALL_ERROR_DIRECTORY_ERROR: desc = self.__tr( "<b>ERROR: Unable to create the plug-in directory.</b><p>Please check your permissions and try again.</p>" ) elif status == PLUGIN_INSTALL_ERROR_UNABLE_TO_RECV_KEYS: desc = self.__tr( "<b>ERROR: Unable to download the public HPLIP keys from the keyserver.</b><p>Error code: %1</p>" ).arg(str(ret)) core.delete_plugin() self.FailureUI(desc) self.close() return local_plugin = ret if not core.run_plugin(GUI_MODE, self.plugin_install_callback): core.delete_plugin() self.FailureUI(self.__tr("Plug-in install failed.")) self.close() return cups_devices = device.getSupportedCUPSDevices(['hp']) #, 'hpfax']) for dev in cups_devices: mq = device.queryModelByURI(dev) if mq.get('fw-download', False): # Download firmware if needed log.info( log.bold("\nDownloading firmware to device %s..." % dev)) try: d = device.Device(dev) except Error: log.error("Error opening device.") continue if d.downloadFirmware(): log.info("Firmware download successful.\n") d.close() core.delete_plugin() self.SuccessUI("Plug-in install successful.") self.close()
def showPage(self, page): orig_page = page if self.first_page: page = self.start_page self.first_page = False log.debug("%s %s %s" % ("*"*20, "showPage(%s)" % page.name(), "*"*20)) try: log.debug("%s --> %s" % (self.prev_page.name(), page.name())) except AttributeError: log.debug("--> %s" % page.name()) if page is self.ConnectionPage: # start --> ConnectionPage pass elif page is self.ProbedDevicesPage: # ConnectionPage --> ProbedDevicesPage/EnterIPPage/DeviceNotFoundPage devices_found = self.updateProbedDevicesPage() elif page is self.PPDPage: # ProbedDevicesPage --> PPDPage if self.param: device_uri, sane_uri, fax_uri = device.makeURI(self.param, self.jd_port) if device_uri: self.device_uri = device_uri back_end, is_hp, bus, model, serial, dev_file, host, zc, port = \ device.parseDeviceURI(self.device_uri) self.bus = bus self.mq = device.queryModelByURI(self.device_uri) norm_model = models.normalizeModelName(model).lower() core = core_install.CoreInstall(core_install.MODE_CHECK) core.set_plugin_version() plugin = self.mq.get('plugin', PLUGIN_NONE) plugin_reason = self.mq.get('plugin-reason', PLUGIN_REASON_NONE) if plugin > PLUGIN_NONE and core.check_for_plugin() != PLUGIN_INSTALLED: ok, sudo_ok = pkit.run_plugin_command(plugin == PLUGIN_REQUIRED, plugin_reason) if not sudo_ok: self.FailureUI(self.__tr("<b>Unable to find an appropriate su/sudo utility to run hp-plugin.</b><p>Install kdesu, gnomesu, or gksu.</p>")) return if not ok or core.check_for_plugin() != PLUGIN_INSTALLED: if plugin == PLUGIN_REQUIRED: self.FailureUI(self.__tr("<b>The printer you are trying to setup requires a binary driver plug-in and it failed to install.</b><p>Please check your internet connection and try again.</p><p>Visit <u>http://hplipopensource.com</u> for more information.</p>")) return else: self.WarningUI(self.__tr("Either you have chosen to skip the installation of the optional plug-in or that installation has failed. Your printer may not function at optimal performance.")) self.updatePPDPage() elif page is self.PrinterNamePage: self.setDefaultPrinterName() if fax_import_ok and prop.fax_build and \ self.mq.get('fax-type', FAX_TYPE_NONE) not in (FAX_TYPE_NONE, FAX_TYPE_NOT_SUPPORTED): self.faxCheckBox.setEnabled(True) self.faxCheckBox.setEnabled(True) self.faxNameLineEdit.setEnabled(True) self.faxNumberLineEdit.setEnabled(True) self.faxNameCoLineEdit.setEnabled(True) self.faxLocationLineEdit.setEnabled(True) self.faxDescriptionLineEdit.setEnabled(True) self.faxInfoGroupBox.setEnabled(True) self.setup_fax = True self.setDefaultFaxName() self.readwriteFaxInformation(True) else: self.setup_fax = False self.fax_name_ok = True self.defaultFaxNamePushButton.setEnabled(False) self.faxCheckBox.setEnabled(False) self.faxNameLineEdit.setEnabled(False) self.faxNumberLineEdit.setEnabled(False) self.faxNameCoLineEdit.setEnabled(False) self.faxLocationLineEdit.setEnabled(False) self.faxDescriptionLineEdit.setEnabled(False) self.faxInfoGroupBox.setEnabled(False) elif page is self.FinishedPage: self.lineEdit1.setText(self.printer_name) self.lineEdit2.setText(self.location) self.lineEdit3.setText(self.desc) self.lineEdit4.setText(self.ppd_file) #log.debug("Restarting CUPS...") #status, output = utils.run(restart_cups()) #log.debug("Restart CUPS returned: exit=%d output=%s" % (status, output)) self.setupPrinter() if self.setup_fax: self.setupFax() self.readwriteFaxInformation(False) self.lineEdit5.setText(self.fax_number) self.lineEdit6.setText(self.fax_name) self.lineEdit7.setText(self.fax_name_company) self.lineEdit8.setText(self.fax_location) self.lineEdit9.setText(self.fax_desc) self.faxGroupBox.setEnabled(True) else: self.faxGroupBox.setEnabled(False) self.setFinishEnabled(self.FinishedPage, True) if orig_page != page: try: log.debug("%s --> %s" % (self.prev_page.name(), page.name())) except AttributeError: log.debug("--> %s" % page.name()) self.prev_page = page QWizard.showPage(self, page) if page is self.ProbedDevicesPage: # ConnectionPage --> ProbedDevicesPage/EnterIPPage/DeviceNotFoundPage if not devices_found: self.FailureUI(self.__tr("<b>No devices found.</b><p>Please make sure your printer is properly connected and powered-on."))
def NextButton_clicked(self): if self.SkipRadioButton.isChecked(): log.debug("Skipping plug-in installation.") self.close() return beginWaitCursor() try: if self.plugin_path: # User specified Path if not self.plugin_path.startswith('http://'): self.plugin_path = 'file://' + self.plugin_path else: log.info("Checking for network connection...") ok = utils.check_network_connection() if not ok: log.error("Network connection not detected.") endWaitCursor() FailureUI(self, self.__tr("Network connection not detected.")) self.close() return log.info("Downloading plug-in from: %s" % self.plugin_path) status, download_plugin_file, error_str = self.pluginObj.download(self.plugin_path,self.plugin_download_callback) if status in (ERROR_UNABLE_TO_RECV_KEYS, ERROR_DIGITAL_SIGN_NOT_FOUND): endWaitCursor() if QMessageBox.question(self, " ", self.__tr("<b>%s</b><p>Without this, it is not possible to authenticate and validate the plug-in prior to installation.</p>Do you still want to install the plug-in?" %error_str), QMessageBox.Yes | QMessageBox.No, QMessageBox.No) != QMessageBox.Yes: self.pluginObj.deleteInstallationFiles(download_plugin_file) self.close() return elif status != ERROR_SUCCESS: self.pluginObj.deleteInstallationFiles(download_plugin_file) endWaitCursor() FailureUI(self, error_str) self.close() return if not self.pluginObj.run_plugin(download_plugin_file, GUI_MODE): self.pluginObj.deleteInstallationFiles(download_plugin_file) endWaitCursor() FailureUI(self, self.__tr("Plug-in install failed.")) self.close() return cups_devices = device.getSupportedCUPSDevices(['hp']) for dev in cups_devices: mq = device.queryModelByURI(dev) if mq.get('fw-download', False): # Download firmware if needed log.info(log.bold("\nDownloading firmware to device %s..." % dev)) try: d = None try: d = device.Device(dev) except Error: log.error("Error opening device.") endWaitCursor() FailureUI(self, self.__tr("<b>Firmware download to device failed.</b><p>%s</p>"%dev)) continue if d.downloadFirmware(): log.info("Firmware download successful.\n") else: endWaitCursor() FailureUI(self, self.__tr("<b>Firmware download to device failed.</b><p>%s</p>"%dev)) finally: if d is not None: d.close() finally: endWaitCursor() self.pluginObj.deleteInstallationFiles(download_plugin_file) SuccessUI(self, self.__tr("<b>Plug-in installation successful</b>")) self.result = True self.close()
def NextButton_clicked(self): if self.SkipRadioButton.isChecked(): log.debug("Skipping plug-in installation.") self.close() return beginWaitCursor() try: if self.plugin_path: # User specified Path if not self.plugin_path.startswith('http://'): self.plugin_path = 'file://' + self.plugin_path else: log.info("Checking for network connection...") ok = utils.check_network_connection() if not ok: log.error("Network connection not detected.") endWaitCursor() FailureUI(self, self.__tr("Network connection not detected.")) self.close() return log.info("Downloading plug-in from: %s" % self.plugin_path) status, download_plugin_file = self.pluginObj.download(self.plugin_path,self.plugin_download_callback) if status in (pluginhandler.PLUGIN_INSTALL_ERROR_UNABLE_TO_RECV_KEYS, pluginhandler.PLUGIN_INSTALL_ERROR_DIGITAL_SIGN_NOT_FOUND): endWaitCursor() if QMessageBox.question(self, self.__tr("Digital signature download failed"), self.__tr("<b>The download of the digital signature file failed.</b><p>Without this file, it is not possible to authenticate and validate the plug-in prior to installation.</p>Do you still want to install the plug-in?"), QMessageBox.Yes | QMessageBox.No) != QMessageBox.Yes: self.pluginObj.deleteInstallationFiles(download_plugin_file) self.close() return elif status != pluginhandler.PLUGIN_INSTALL_ERROR_NONE: if status == pluginhandler.PLUGIN_INSTALL_ERROR_PLUGIN_FILE_NOT_FOUND: desc = self.__tr("<b>ERROR: Plug-in file not found (server returned 404 or similar error)") elif status == pluginhandler.PLUGIN_INSTALL_ERROR_DIGITAL_SIGN_BAD: desc = self.__tr("<b>ERROR: Plug-in file does not match its digital signature.</b><p>File may have been corrupted or altered.") elif status == pluginhandler.PLUGIN_INSTALL_ERROR_PLUGIN_FILE_CHECKSUM_ERROR: desc = self.__tr("<b>ERROR: Plug-in file does not match its checksum. File may have been corrupted or altered.") elif status == pluginhandler.PLUGIN_INSTALL_ERROR_NO_NETWORK: desc = self.__tr("<b>ERROR: Unable to connect to network to download the plug-in.</b><p>Please check your network connection and try again.</p>") elif status == pluginhandler.PLUGIN_INSTALL_ERROR_DIRECTORY_ERROR: desc = self.__tr("<b>ERROR: Unable to create the plug-in directory.</b><p>Please check your permissions and try again.</p>") self.pluginObj.deleteInstallationFiles(download_plugin_file) endWaitCursor() FailureUI(self, desc) self.close() return if not self.pluginObj.run_plugin(download_plugin_file, GUI_MODE): self.pluginObj.deleteInstallationFiles(download_plugin_file) endWaitCursor() FailureUI(self, self.__tr("Plug-in install failed.")) self.close() return cups_devices = device.getSupportedCUPSDevices(['hp']) for dev in cups_devices: mq = device.queryModelByURI(dev) if mq.get('fw-download', False): # Download firmware if needed log.info(log.bold("\nDownloading firmware to device %s..." % dev)) try: d = None try: d = device.Device(dev) except Error: log.error("Error opening device.") endWaitCursor() FailureUI(self, self.__tr("<b>Firmware download to device failed.</b><p>%1</p>").arg(dev)) continue if d.downloadFirmware(): log.info("Firmware download successful.\n") else: endWaitCursor() FailureUI(self, self.__tr("<b>Firmware download to device failed.</b><p>%1</p>").arg(dev)) finally: if d is not None: d.close() finally: endWaitCursor() self.pluginObj.deleteInstallationFiles(download_plugin_file) SuccessUI(self, self.__tr("<b>Plug-in installation successful</b>")) self.result = True self.close()
def executeSendFax(self): self.NextButton.setEnabled(False) self.BackButton.setEnabled(False) self.CheckTimer.stop() self.busy = True phone_num_list = [] ppd_file = cups.getPPD(self.printer_name) if ppd_file is not None and os.path.exists(ppd_file): if open(ppd_file, 'rb').read().find(b'HP Fax') == -1: FailureUI( self, self.__tr( "<b>Fax configuration error.</b><p>The CUPS fax queue for '%s' is incorrectly configured.<p>Please make sure that the CUPS fax queue is configured with the 'HPLIP Fax' Model/Driver." % self.printer_name)) self.close() return beginWaitCursor() mq = device.queryModelByURI(self.device_uri) self.dev = fax.getFaxDevice(self.device_uri, self.printer_name, None, mq['fax-type']) try: try: self.dev.open() except Error as e: log.warn(e.msg) try: self.dev.queryDevice(quick=True) except Error as e: log.error("Query device error (%s)." % e.msg) self.dev.error_state = ERROR_STATE_ERROR finally: self.dev.close() endWaitCursor() if self.dev.error_state > ERROR_STATE_MAX_OK and \ self.dev.error_state not in (ERROR_STATE_LOW_SUPPLIES, ERROR_STATE_LOW_PAPER): FailureUI( self, self.__tr( "<b>Device is busy or in an error state (code=%s)</b><p>Please wait for the device to become idle or clear the error and try again." % self.dev.status_code)) self.NextButton.setEnabled(True) return # Check to make sure queue in CUPS is idle self.cups_printers = cups.getPrinters() for p in self.cups_printers: if p.name == self.printer_name: if p.state == cups.IPP_PRINTER_STATE_STOPPED: FailureUI( self, self.__tr( "<b>The CUPS queue for '%s' is in a stopped or busy state.</b><p>Please check the queue and try again." % self.printer_name)) self.NextButton.setEnabled(False) return break log.debug("Recipient list:") for p in self.recipient_list: entry = self.db.get(p) phone_num_list.append(entry) log.debug("Name=%s Number=%s" % (entry["name"], entry["fax"])) log.debug("File list:") for f in self.file_list: log.debug(f) self.dev.sendEvent(EVENT_START_FAX_JOB, self.printer_name, 0, '') if not self.dev.sendFaxes( phone_num_list, self.file_list, self.cover_page_message, self.cover_page_re, self.cover_page_func, self.preserve_formatting, self.printer_name, self.update_queue, self.event_queue): FailureUI( self, self.__tr( "<b>Send fax is active.</b><p>Please wait for operation to complete." )) self.dev.sendEvent(EVENT_FAX_JOB_FAIL, self.printer_name, 0, '') self.busy = False self.send_fax_active = False #self.NextButton.setEnabled(False) self.setCancelCloseButton() return self.send_fax_active = True self.setCancelCloseButton() self.SendFaxTimer = QTimer(self) self.connect(self.SendFaxTimer, SIGNAL('timeout()'), self.SendFaxTimer_timeout) self.SendFaxTimer.start(1000) # 1 sec UI updates
def NextButton_clicked(self): if self.SkipRadioButton.isChecked(): log.debug("Skipping plug-in installation.") self.close() return beginWaitCursor() try: if self.plugin_path: # User specified Path if not self.plugin_path.startswith('http://'): self.plugin_path = 'file://' + self.plugin_path else: log.info("Checking for network connection...") ok = utils.check_network_connection() if not ok: log.error("Network connection not detected.") endWaitCursor() FailureUI(self, self.__tr("Network connection not detected.")) self.close() return log.info("Downloading plug-in from: %s" % self.plugin_path) status, download_plugin_file, error_str = self.pluginObj.download(self.plugin_path,self.plugin_download_callback) if status in (ERROR_UNABLE_TO_RECV_KEYS, ERROR_DIGITAL_SIGN_NOT_FOUND): endWaitCursor() if QMessageBox.question(self, " ", self.__tr("<b>%s</b><p>Without this, it is not possible to authenticate and validate the plug-in prior to installation.</p>Do you still want to install the plug-in?" %error_str), QMessageBox.Yes | QMessageBox.No) != QMessageBox.Yes: self.pluginObj.deleteInstallationFiles(download_plugin_file) self.close() return elif status != ERROR_SUCCESS: self.pluginObj.deleteInstallationFiles(download_plugin_file) endWaitCursor() FailureUI(self, error_str) self.close() return if not self.pluginObj.run_plugin(download_plugin_file, GUI_MODE): self.pluginObj.deleteInstallationFiles(download_plugin_file) endWaitCursor() FailureUI(self, self.__tr("Plug-in install failed.")) self.close() return cups_devices = device.getSupportedCUPSDevices(['hp']) for dev in cups_devices: mq = device.queryModelByURI(dev) if mq.get('fw-download', False): # Download firmware if needed log.info(log.bold("\nDownloading firmware to device %s..." % dev)) try: d = None try: d = device.Device(dev) except Error: log.error("Error opening device.") endWaitCursor() FailureUI(self, self.__tr("<b>Firmware download to device failed.</b><p>%1</p>").arg(dev)) continue if d.downloadFirmware(): log.info("Firmware download successful.\n") else: endWaitCursor() FailureUI(self, self.__tr("<b>Firmware download to device failed.</b><p>%1</p>").arg(dev)) finally: if d is not None: d.close() finally: endWaitCursor() self.pluginObj.deleteInstallationFiles(download_plugin_file) SuccessUI(self, self.__tr("<b>Plug-in installation successful</b>")) self.result = True self.close()
def actionPushButton_clicked(self): if self.path: # path if not self.path.startswith('http://'): self.path = 'file://' + self.path else: log.info("Checking for network connection...") ok = utils.check_network_connection() if not ok: log.error("Network connection not detected.") self.FailureUI(self.__tr("Network connection not detected.")) self.close() return log.info("Downloading plug-in from: %s" % self.path) status, self.path = self.pluginObj.download(self.path, self.plugin_download_callback) if status != pluginhandler.PLUGIN_INSTALL_ERROR_NONE: if status == pluginhandler.PLUGIN_INSTALL_ERROR_PLUGIN_FILE_NOT_FOUND: desc = self.__tr("<b>ERROR: Plug-in file not found (server returned 404 or similar error).") elif status == pluginhandler.PLUGIN_INSTALL_ERROR_DIGITAL_SIGN_NOT_FOUND: desc = self.__tr("<b>ERROR: Plug-in digital signature file not found (server returned 404 or similar error).") elif status == pluginhandler.PLUGIN_INSTALL_ERROR_DIGITAL_SIGN_BAD: desc = self.__tr("<b>ERROR: Plug-in file does not match its digital signature.</b><p>File may have been corrupted or altered.") elif status == pluginhandler.PLUGIN_INSTALL_ERROR_PLUGIN_FILE_CHECKSUM_ERROR: desc = self.__tr("<b>ERROR: Plug-in file does not match its checksum. File may have been corrupted or altered.") elif status == pluginhandler.PLUGIN_INSTALL_ERROR_NO_NETWORK: desc = self.__tr("<b>ERROR: Unable to connect to network to download the plug-in.</b><p>Please check your network connection and try again.</p>") elif status == pluginhandler.PLUGIN_INSTALL_ERROR_DIRECTORY_ERROR: desc = self.__tr("<b>ERROR: Unable to create the plug-in directory.</b><p>Please check your permissions and try again.</p>") elif status == pluginhandler.PLUGIN_INSTALL_ERROR_UNABLE_TO_RECV_KEYS: desc = self.__tr("<b>ERROR: Unable to download the public HPLIP keys from the keyserver.") self.pluginObj.deleteInstallationFiles(self.path) self.FailureUI(desc) self.close() return if not self.pluginObj.run_plugin(self.path, GUI_MODE): self.pluginObj.deleteInstallationFiles(self.path) self.FailureUI(self.__tr("Plug-in install failed.")) self.close() return cups_devices = device.getSupportedCUPSDevices(['hp']) #, 'hpfax']) for dev in cups_devices: mq = device.queryModelByURI(dev) if mq.get('fw-download', False): # Download firmware if needed log.info(log.bold("\nDownloading firmware to device %s..." % dev)) try: d = device.Device(dev) except Error: log.error("Error opening device.") continue if d.downloadFirmware(): log.info("Firmware download successful.\n") d.close() self.pluginObj.deleteInstallationFiles(self.path) self.SuccessUI("Plug-in install successful") self.close()
def NextButton_clicked(self): p = self.StackedWidget.currentIndex() if p == PAGE_DISCOVERY: self.manual = self.ManualGroupBox.isChecked() self.param = unicode(self.ManualParamLineEdit.text()) self.jd_port = self.JetDirectSpinBox.value() self.search = unicode(self.SearchLineEdit.text()) self.device_desc = int(self.DeviceTypeComboBox.itemData(self.DeviceTypeComboBox.currentIndex()).toInt()[0]) self.discovery_method = self.NetworkDiscoveryMethodComboBox.currentIndex() if self.WirelessButton.isChecked(): dlg = WifiSetupDialog(self, device_uri=None, standalone=False) dlg.exec_() if dlg.success == SUCCESS_CONNECTED: self.manual = True self.param = dlg.hn self.bus = 'net' if not self.WirelessButton.isChecked(): self.showDevicesPage() elif p == PAGE_DEVICES: row = self.DevicesTableWidget.currentRow() self.device_uri = self.DevicesTableWidget.item(row, 0).device_uri self.mq = device.queryModelByURI(self.device_uri) back_end, is_hp, bus, model, serial, dev_file, host, zc, port = device.parseDeviceURI(self.device_uri) self.model = models.normalizeModelName(model).lower() self.showAddPrinterPage() elif p == PAGE_ADD_PRINTER: self.print_test_page = self.SendTestPageCheckBox.isChecked() self.print_desc = unicode(self.PrinterDescriptionLineEdit.text()).encode('utf8') self.print_location = unicode(self.PrinterLocationLineEdit.text()).encode('utf8') self.fax_setup = self.SetupFaxGroupBox.isChecked() self.fax_desc = unicode(self.FaxDescriptionLineEdit.text()) self.fax_location = unicode(self.FaxLocationLineEdit.text()) self.fax_name_company = unicode(self.NameCompanyLineEdit.text()) self.fax_number = unicode(self.FaxNumberLineEdit.text()) self.addPrinter() elif p == PAGE_REMOVE: for row in xrange(self.RemoveDevicesTableWidget.rowCount()): widget = self.RemoveDevicesTableWidget.cellWidget(row, 0) if widget.checkState() == Qt.Checked: item = self.RemoveDevicesTableWidget.item(row, 1) printer = unicode(item.data(Qt.UserRole).toString()).encode('utf-8') uri = device.getDeviceURIByPrinterName(printer) log.debug("Removing printer: %s" % printer) status, status_str = cups.cups_operation(cups.delPrinter, GUI_MODE, 'qt4', self, printer) if status != cups.IPP_OK: FailureUI(self, self.__tr("<b>Unable to delete '%s' queue. </b><p>Error : %s"%(printer,status_str))) if status == cups.IPP_FORBIDDEN or status == cups.IPP_NOT_AUTHENTICATED or status == cups.IPP_NOT_AUTHORIZED: break else: # sending Event to add this device in hp-systray utils.sendEvent(EVENT_CUPS_QUEUES_REMOVED, uri, printer) self.close() else: log.error("Invalid page!") # shouldn't happen!
if not device_uri: clean_exit(0) # ******************************* QUERY MODEL AND COLLECT PPDS log.info(log.bold("\nSetting up device: %s\n" % device_uri)) log.info("") print_uri = device_uri.replace("hpfax:", "hp:") fax_uri = device_uri.replace("hp:", "hpfax:") back_end, is_hp, bus, model, \ serial, dev_file, host, zc, port = \ device.parseDeviceURI(device_uri) log.debug("Model=%s" % model) mq = device.queryModelByURI(device_uri) if not mq or mq.get('support-type', SUPPORT_TYPE_NONE) == SUPPORT_TYPE_NONE: log.error("Unsupported printer model.") clean_exit(1) if mq.get('fax-type', FAX_TYPE_NONE) in (FAX_TYPE_NONE, FAX_TYPE_NOT_SUPPORTED) and setup_fax: #log.warning("Cannot setup fax - device does not have fax feature.") setup_fax = False # ******************************* PLUGIN norm_model = models.normalizeModelName(model).lower() plugin = mq.get('plugin', PLUGIN_NONE) if ignore_plugin_check is False and plugin > PLUGIN_NONE:
def NextButton_clicked(self): if self.SkipRadioButton.isChecked(): log.debug("Skipping plug-in installation.") self.close() return beginWaitCursor() try: if self.plugin_path is None: # download # read plugin.conf (local or on sf.net) to get plugin_path (http://) plugin_conf_url = self.core.get_plugin_conf_url() if plugin_conf_url.startswith('file://'): pass else: log.info("Checking for network connection...") ok = self.core.check_network_connection() if not ok: log.error("Network connection not detected.") endWaitCursor() FailureUI( self, self.__tr("Network connection not detected.")) self.close() return log.info("Downloading configuration file from: %s" % plugin_conf_url) self.plugin_path, size, checksum, timestamp, ok = self.core.get_plugin_info( plugin_conf_url, self.plugin_download_callback) log.debug( "path=%s, size=%d, checksum=%s, timestamp=%f, ok=%s" % (self.plugin_path, size, checksum, timestamp, ok)) if not self.plugin_path.startswith( 'http://') and not self.plugin_path.startswith( 'file://'): self.plugin_path = 'file://' + self.plugin_path else: # path if not self.plugin_path.startswith('http://'): self.plugin_path = 'file://' + self.plugin_path size, checksum, timestamp = 0, '', 0 if self.plugin_path.startswith('file://'): pass else: log.info("Checking for network connection...") ok = self.core.check_network_connection() if not ok: log.error("Network connection not detected.") endWaitCursor() FailureUI(self, self.__tr("Network connection not detected.")) self.close() return log.info("Downloading plug-in from: %s" % self.plugin_path) status, ret = self.core.download_plugin( self.plugin_path, size, checksum, timestamp, self.plugin_download_callback) if status in (PLUGIN_INSTALL_ERROR_UNABLE_TO_RECV_KEYS, PLUGIN_INSTALL_ERROR_DIGITAL_SIG_NOT_FOUND): endWaitCursor() if QMessageBox.question( self, self.__tr("Digital signature download failed"), self.__tr( "<b>The download of the digital signature file failed.</b><p>Without this file, it is not possible to authenticate and validate the plug-in prior to installation.</p>Do you still want to install the plug-in?" ), QMessageBox.Yes | QMessageBox.No) != QMessageBox.Yes: self.core.delete_plugin() self.close() return elif status != PLUGIN_INSTALL_ERROR_NONE: if status == PLUGIN_INSTALL_ERROR_PLUGIN_FILE_NOT_FOUND: desc = self.__tr( "<b>ERROR: Plug-in file not found (server returned 404 or similar error).</b><p>Error code: %1</p>" ).arg(str(ret)) elif status == PLUGIN_INSTALL_ERROR_DIGITAL_SIG_BAD: desc = self.__tr( "<b>ERROR: Plug-in file does not match its digital signature.</b><p>File may have been corrupted or altered.</p><p>Error code: %1</p>" ).arg(str(ret)) elif status == PLUGIN_INSTALL_ERROR_PLUGIN_FILE_CHECKSUM_ERROR: desc = self.__tr( "<b>ERROR: Plug-in file does not match its checksum. File may have been corrupted or altered." ) elif status == PLUGIN_INSTALL_ERROR_NO_NETWORK: desc = self.__tr( "<b>ERROR: Unable to connect to network to download the plug-in.</b><p>Please check your network connection and try again.</p>" ) elif status == PLUGIN_INSTALL_ERROR_DIRECTORY_ERROR: desc = self.__tr( "<b>ERROR: Unable to create the plug-in directory.</b><p>Please check your permissions and try again.</p>" ) self.core.delete_plugin() endWaitCursor() FailureUI(self, desc) self.close() return if not self.core.run_plugin(GUI_MODE, self.plugin_install_callback): self.core.delete_plugin() endWaitCursor() FailureUI(self, self.__tr("Plug-in install failed.")) self.close() return cups_devices = device.getSupportedCUPSDevices(['hp']) for dev in cups_devices: mq = device.queryModelByURI(dev) if mq.get('fw-download', False): # Download firmware if needed log.info( log.bold("\nDownloading firmware to device %s..." % dev)) try: d = None try: d = device.Device(dev) except Error: log.error("Error opening device.") endWaitCursor() FailureUI( self, self.__tr( "<b>Firmware download to device failed.</b><p>%1</p>" ).arg(dev)) continue if d.downloadFirmware(): log.info("Firmware download successful.\n") else: endWaitCursor() FailureUI( self, self.__tr( "<b>Firmware download to device failed.</b><p>%1</p>" ).arg(dev)) finally: if d is not None: d.close() finally: endWaitCursor() self.core.delete_plugin() SuccessUI(self, self.__tr("<b>Plug-in installation successful.</b>")) self.result = True self.close()
sys.exit(1) log.debug("param=%s" % param) if len(param) < 1: usage() sys.exit() if param: device_uri, sane_uri, fax_uri = device.makeURI(param) if not device_uri: log.error("This is not a valid device") sys.exit(0) log.debug("\nSetting up device: %s\n" % device_uri) #Query model and checks Plugin information. mq = device.queryModelByURI(device_uri) if not mq or mq.get('support-type', SUPPORT_TYPE_NONE) == SUPPORT_TYPE_NONE: log.error("Unsupported printer model.") sys.exit(1) plugin = mq.get('plugin', PLUGIN_NONE) if plugin == PLUGIN_NONE: log.debug("This is not a plugin device.") sys.exit() if not Plugin_option_Enabled: Systray_Msg_Enabled = True # checking whether HP-systray is running or not. Invokes, if systray is not running Systray_Is_Running=False status,output = utils.Is_Process_Running('hp-systray')
def executeSendFax(self): self.NextButton.setEnabled(False) self.BackButton.setEnabled(False) self.CheckTimer.stop() self.busy = True phone_num_list = [] ppd_file = cups.getPPD(self.printer_name) if ppd_file is not None and os.path.exists(ppd_file): if open(ppd_file, 'rb').read().find(b'HP Fax') == -1: FailureUI(self, self.__tr("<b>Fax configuration error.</b><p>The CUPS fax queue for '%s' is incorrectly configured.<p>Please make sure that the CUPS fax queue is configured with the 'HPLIP Fax' Model/Driver."%self.printer_name)) self.close() return beginWaitCursor() mq = device.queryModelByURI(self.device_uri) self.dev = fax.getFaxDevice(self.device_uri, self.printer_name, None, mq['fax-type']) try: try: self.dev.open() except Error as e: log.warn(e.msg) try: self.dev.queryDevice(quick=True) except Error as e: log.error("Query device error (%s)." % e.msg) self.dev.error_state = ERROR_STATE_ERROR finally: self.dev.close() endWaitCursor() if self.dev.error_state > ERROR_STATE_MAX_OK and \ self.dev.error_state not in (ERROR_STATE_LOW_SUPPLIES, ERROR_STATE_LOW_PAPER): FailureUI(self, self.__tr("<b>Device is busy or in an error state (code=%s)</b><p>Please wait for the device to become idle or clear the error and try again."%self.dev.status_code)) self.NextButton.setEnabled(True) return # Check to make sure queue in CUPS is idle self.cups_printers = cups.getPrinters() for p in self.cups_printers: if p.name == self.printer_name: if p.state == cups.IPP_PRINTER_STATE_STOPPED: FailureUI(self, self.__tr("<b>The CUPS queue for '%s' is in a stopped or busy state.</b><p>Please check the queue and try again."%self.printer_name)) self.NextButton.setEnabled(False) return break log.debug("Recipient list:") for p in self.recipient_list: entry = self.db.get(p) phone_num_list.append(entry) log.debug("Name=%s Number=%s" % (entry["name"], entry["fax"])) log.debug("File list:") for f in self.file_list: log.debug(f) self.dev.sendEvent(EVENT_START_FAX_JOB, self.printer_name, 0, '') if not self.dev.sendFaxes(phone_num_list, self.file_list, self.cover_page_message, self.cover_page_re, self.cover_page_func, self.preserve_formatting, self.printer_name, self.update_queue, self.event_queue): FailureUI(self, self.__tr("<b>Send fax is active.</b><p>Please wait for operation to complete.")) self.dev.sendEvent(EVENT_FAX_JOB_FAIL, self.printer_name, 0, '') self.busy = False self.send_fax_active = False #self.NextButton.setEnabled(False) self.setCancelCloseButton() return self.send_fax_active = True self.setCancelCloseButton() self.SendFaxTimer = QTimer(self) self.connect(self.SendFaxTimer, SIGNAL('timeout()'), self.SendFaxTimer_timeout) self.SendFaxTimer.start(1000) # 1 sec UI updates