Index: system-config-printer-1.3.9-mga2/newprinter.py =================================================================== --- system-config-printer-1.3.9-mga2/newprinter.py +++ system-config-printer-1.3.9-mga2/newprinter.py 2012-03-26 06:43:25.563272111 +0300 @@ -36,6 +36,7 @@ from timedops import * import dbus import gtk +import mga_printer_custom import cups @@ -964,6 +965,27 @@ # Remote CUPS queue discovered by "dnssd" CUPS backend self.remotecupsqueue = self.device.info + # mageia hook: ask to install the right driver + driver_packages=None + if not self.remotecupsqueue and not self.device.type in ("lpd", "ipp", "bluetooth", "smb"): + if self.device.id_dict['DES'] != "AppSocket/HP JetDirect": + if self.device.id_dict["MFG"] and self.device.id_dict["MDL"]: + driver_packages = mga_printer_custom.guess_driver_packages(self.device.id_dict["MFG"], self.device.id_dict["MDL"]) + else: + driver_packages = mga_printer_custom.guess_driver_packages(self.auto_make, self.auto_model) + if driver_packages: + if not mga_printer_custom.is_installed_packages(driver_packages): + status = gtk.RESPONSE_YES + while status != gtk.RESPONSE_NO: + if not mga_printer_custom.install_packages(driver_packages): + dialog = gtk.MessageDialog(self.NewPrinterWindow, + buttons=gtk.BUTTONS_YES_NO, + message_format=_("The required driver package is missing, try again?")) + status = dialog.run() + dialog.destroy() + else: + break + if not self.remotecupsqueue: if self.ppds == None: devid = self.device.id # ID of selected device @@ -1032,6 +1054,10 @@ self.id_matched_ppdnames = ppdnamelist ppdname = ppdnamelist[0] status = fit[ppdname] + elif self.device.uri and self.device.uri.startswith ("parallel"): + (p_make, p_model) = mga_printer_custom.probe_parport_info(self.device.uri) + self.auto_make = p_make + self.auto_model = p_model else: (status, ppdname) = self.ppds.\ getPPDNameFromDeviceID ("Generic", @@ -2471,6 +2497,11 @@ # the selected device. if device.type == "parallel": text = _("A printer connected to the parallel port.") + (p_make, p_model) = mga_printer_custom.probe_parport_info(device.uri) + if p_make and p_model: + make_model = p_make + " " + p_model + info = make_model + " ("+ device.info + ")" + device.info = info elif device.type == "usb": text = _("A printer connected to a USB port.") elif device.type == "bluetooth": Index: system-config-printer-1.3.9-mga2/ppdsloader.py =================================================================== --- system-config-printer-1.3.9-mga2/ppdsloader.py +++ system-config-printer-1.3.9-mga2/ppdsloader.py 2012-03-26 06:17:49.529641947 +0300 @@ -101,7 +101,10 @@ if self._local_cups and self._device_id and self._bus: self._gpk_device_id = "MFG:%s;MDL:%s;" % (self._devid_dict["MFG"], self._devid_dict["MDL"]) - self._query_packagekit () + # don't ask PackageKit for drivers, not used on Mageia (yet?) + # and produces a scary error message (Anssi 03/2012) + #self._query_packagekit () + self._query_cups () else: self._query_cups () Index: system-config-printer-1.3.9-mga2/system-config-printer.py =================================================================== --- system-config-printer-1.3.9-mga2/system-config-printer.py +++ system-config-printer-1.3.9-mga2/system-config-printer.py 2012-03-26 06:07:47.514286017 +0300 @@ -26,6 +26,7 @@ import sys, os, time, re import thread +import mga_printer_custom import dbus try: import gtk @@ -461,6 +462,13 @@ self.PrintersWindow.show() + # task-printing-hp is needed even if you dont have a HP printer. (hp-makeuri, hp-info..) + if not mga_printer_custom.is_installed_packages(['task-printing-server', 'task-printing-hp']): + if not mga_printer_custom.install_packages(['task-printing-server', 'task-printing-hp']): + sys.exit (1) + os.system("/sbin/service cups start") + self.on_btnRefresh_clicked(None) + def display_properties_dialog_for (self, queue): model = self.dests_iconview.get_model () iter = model.get_iter_first () @@ -1731,6 +1739,7 @@ # new printer def on_new_printer_activate(self, widget): busy (self.PrintersWindow) + mga_printer_custom.reload_parport() if not self.newPrinterGUI.init("printer", host=self.connect_server, encryption=self.connect_encrypt, Index: system-config-printer-1.3.9-mga2/udev/udev-add-printer =================================================================== --- system-config-printer-1.3.9-mga2/udev/udev-add-printer +++ system-config-printer-1.3.9-mga2/udev/udev-add-printer 2012-03-26 06:07:47.514286017 +0300 @@ -1,4 +1,5 @@ #!/usr/bin/python +# -*- coding: utf-8 -*- ## udev-add-printer @@ -25,6 +26,8 @@ import os import sys import traceback +import mga_printer_custom +import re from syslog import * MFG_BLACKLIST=[ @@ -104,6 +107,82 @@ return syslog (LOG_DEBUG, "add_queue: URIs=%s" % device_uris) + syslog (LOG_DEBUG, "add_queue: ID=%s" % device_id ) + + """ We extract the manufacturer from device_id """ + make = device_id.split(';')[0].split(':')[1] + model = device_id.split(';')[1].split(':')[1] + + syslog (LOG_DEBUG, "add_queue: make=%s" % make ) + syslog (LOG_DEBUG, "add_queue: model=%s" % model ) + + bus = dbus.SystemBus() + + try: + obj = bus.get_object ("com.redhat.NewPrinterNotification", + "/com/redhat/NewPrinterNotification") + notification = dbus.Interface (obj, + "com.redhat.NewPrinterNotification") + #notification.GetReady () + except: + pass + + """Ensure we have cups installed and running""" + if not mga_printer_custom.is_installed_packages(['task-printing-server']): + try: + syslog (LOG_DEBUG, "Calling InstallSpooler") + ret = bus.call_blocking('com.redhat.NewPrinterNotification', + '/com/redhat/NewPrinterNotification', + 'com.redhat.NewPrinterNotification', 'InstallSpooler', + '', (), timeout=360) + if not ret: + syslog (LOG_DEBUG, "InstallSpooler Failed") + bus.call_blocking('com.redhat.NewPrinterNotification', + '/com/redhat/NewPrinterNotification', + 'com.redhat.NewPrinterNotification', 'InstallSpoolerFailed', + '', (), timeout=360) + return + except dbus.DBusException, e: + syslog (LOG_DEBUG, "D-Bus method call failed: %s" % e) + + packages = mga_printer_custom.guess_driver_packages(make, model) + syslog (LOG_DEBUG, "PACKAGES: %s" % packages) + # if no package is found, try the auto detection anyway + if packages: + try: + if not mga_printer_custom.is_installed_packages(packages): + packages_ok = bus.call_blocking('com.redhat.NewPrinterNotification', + '/com/redhat/NewPrinterNotification', + 'com.redhat.NewPrinterNotification', 'InstallDriver', + 'ssas', (make,model,packages), timeout=360) + if not packages_ok: + bus.call_blocking('com.redhat.NewPrinterNotification', + '/com/redhat/NewPrinterNotification', + 'com.redhat.NewPrinterNotification', 'MissingDriver', + 'ss', (make,model,)) + return + except dbus.DBusException, e: + pass + if mga_printer_custom.is_firmware_needed(make, model): + if (not mga_printer_custom.is_firmware_present(make,model)) and (mga_printer_custom.make2simplename(make) == "hp"): + try: + syslog (LOG_INFO, "Firmware PrinterFirmwareDownload") + bus.call_blocking('com.redhat.NewPrinterNotification', + '/com/redhat/NewPrinterNotification', + 'com.redhat.NewPrinterNotification', 'PrinterFirmwareDownload', + 'ss', (make,model,), timeout=360) + if not mga_printer_custom.is_firmware_present(make,model): + bus.call_blocking('com.redhat.NewPrinterNotification', + '/com/redhat/NewPrinterNotification', + 'com.redhat.NewPrinterNotification', 'MissingDriver', + 'ss', (make,model,)) + return + else: + return + + except dbus.DBusException, e: + pass + installer = None if fax_basename != False: notification = None @@ -119,16 +198,6 @@ syslog (LOG_DEBUG, "D-Bus method call failed: %s" % e) notification = None - try: - obj = bus.get_object ("com.redhat.PrinterDriversInstaller", - "/com/redhat/PrinterDriversInstaller") - installer = dbus.Interface (obj, - "com.redhat.PrinterDriversInstaller") - except dbus.DBusException, e: - #syslog (LOG_DEBUG, "Failed to get D-Bus object for " - # "PrinterDriversInstaller: %s" % e) - pass - id_dict = cupshelpers.parseDeviceID (device_id) if installer: cmd = id_dict["CMD"] @@ -150,6 +219,20 @@ id_dict["DES"], id_dict["CMD"], device_uris[0]) + + """We reach here when we have cups installed""" + if os.system("/sbin/service cups status") != 0: + if os.system("/sbin/service cups restart") != 0: + bus = dbus.SystemBus() + try: + syslog (LOG_DEBUG, "Calling SpoolerStartFailed") + ret = bus.call_blocking('com.redhat.NewPrinterNotification', + '/com/redhat/NewPrinterNotification', + 'com.redhat.NewPrinterNotification', 'SpoolerStartFailed', + '', (), timeout=360) + except dbus.DBusException, e: + syslog (LOG_DEBUG, "D-Bus method call failed: %s" % e) + syslog (LOG_DEBUG, "PPD: %s; Status: %d" % (ppdname, status)) if status == 0: