From 78c68433f6dc9b1dc1a7bcad6dca8bbb5238f8bd Mon Sep 17 00:00:00 2001 From: Tim Waugh Date: Tue, 22 Mar 2011 17:02:31 +0000 Subject: [PATCH] Improvements for check-device-ids from upstream. --- system-config-printer-check-device-ids.patch | 111 +++++++++++++++++++ system-config-printer.spec | 5 + 2 files changed, 116 insertions(+) create mode 100644 system-config-printer-check-device-ids.patch diff --git a/system-config-printer-check-device-ids.patch b/system-config-printer-check-device-ids.patch new file mode 100644 index 0000000..35f01f1 --- /dev/null +++ b/system-config-printer-check-device-ids.patch @@ -0,0 +1,111 @@ +diff -up system-config-printer-1.3.2/check-device-ids.py.check-device-ids system-config-printer-1.3.2/check-device-ids.py +--- system-config-printer-1.3.2/check-device-ids.py.check-device-ids 2011-02-20 14:35:25.000000000 +0000 ++++ system-config-printer-1.3.2/check-device-ids.py 2011-03-22 17:01:34.468998320 +0000 +@@ -2,7 +2,7 @@ + + ## check-device-ids + +-## Copyright (C) 2010 Red Hat, Inc. ++## Copyright (C) 2010, 2011 Red Hat, Inc. + ## Authors: + ## Tim Waugh + +@@ -32,8 +32,12 @@ c = cups.Connection () + devices = None + if len (sys.argv) > 1 and sys.argv[1] == '--help': + print "Syntax: check-device-ids " ++ print " or: check-device-ids " ++ print " or: check-device-ids " ++ print " or: check-device-ids" + sys.exit (1) + ++SPECIFIC_URI = None + if len (sys.argv) == 3: + id_dict = cupshelpers.parseDeviceID (sys.argv[2]) + if id_dict.has_key ("MFG") and id_dict.has_key ("MDL"): +@@ -41,15 +45,34 @@ if len (sys.argv) == 3: + { 'device-make-and-model': sys.argv[1], + 'device-id': sys.argv[2] } + } ++elif len (sys.argv) == 2: ++ if sys.argv[1].find (":/") != -1: ++ SPECIFIC_URI = sys.argv[1] ++ else: ++ # This is a queue name. Work out the URI from that. ++ try: ++ attrs = c.getPrinterAttributes (sys.argv[1]) ++ except cups.IPPError, (e, m): ++ print "Error getting printer attibutes: %s" % m ++ sys.exit (1) ++ ++ SPECIFIC_URI = attrs['device-uri'] ++ print "URI for queue %s is %s" % (sys.argv[1], SPECIFIC_URI) + else: + print ("\nIf you have not already done so, you may get more results\n" + "by temporarily disabling your firewall (or by allowing\n" + "incoming UDP packets on port 161).\n") + + if devices == None: +- print "Examining connected devices" ++ if not SPECIFIC_URI: ++ print "Examining connected devices" ++ + try: +- devices = c.getDevices (exclude_schemes=["dnssd", "hal", "hpfax"]) ++ if SPECIFIC_URI: ++ scheme = str (SPECIFIC_URI.split (":", 1)[0]) ++ devices = c.getDevices (include_schemes=[scheme]) ++ else: ++ devices = c.getDevices (exclude_schemes=["dnssd", "hal", "hpfax"]) + except cups.IPPError, (e, m): + if e == cups.IPP_FORBIDDEN: + print "Run this as root to examine IDs from attached devices." +@@ -59,6 +82,11 @@ if devices == None: + print "Not authorized." + sys.exit (1) + ++if SPECIFIC_URI: ++ if devices.get (SPECIFIC_URI) == None: ++ devices = { SPECIFIC_URI: ++ { 'device-make-and-model': '', ++ 'device-id': ''} } + if len (devices) == 0: + print "No attached devices." + sys.exit (0) +@@ -69,14 +97,20 @@ for device, attrs in devices.iteritems ( + if device.find (":") == -1: + continue + ++ if SPECIFIC_URI and device != SPECIFIC_URI: ++ continue ++ + make_and_model = attrs.get ('device-make-and-model') + device_id = attrs.get ('device-id') +- if make_and_model and not device_id: ++ if (SPECIFIC_URI or make_and_model) and not device_id: + try: + hostname = None + if (device.startswith ("socket://") or +- device.startswith ("lpd://")): +- hostname = device[9:] ++ device.startswith ("lpd://") or ++ device.startswith ("ipp://") or ++ device.startswith ("http://") or ++ device.startswith ("https://")): ++ hostname = device[device.find ("://") + 3:] + colon = hostname.find (":") + if colon != -1: + hostname = hostname[:colon] +@@ -100,7 +134,11 @@ for device, attrs in devices.iteritems ( + if dev.id: + device_id = dev.id + attrs.update ({'device-id': dev.id}) +- break ++ ++ if not make_and_model and dev.make_and_model: ++ make_and_model = dev.make_and_model ++ attrs.update ({'device-make-and-model': ++ dev.make_and_model}) + + except Exception, e: + print "Exception: %s" % repr (e) diff --git a/system-config-printer.spec b/system-config-printer.spec index 2bb7473..6220e25 100644 --- a/system-config-printer.spec +++ b/system-config-printer.spec @@ -11,6 +11,7 @@ URL: http://cyberelk.net/tim/software/system-config-printer/ Group: System Environment/Base Source0: http://cyberelk.net/tim/data/system-config-printer/1.2/%{name}-%{version}.tar.xz Patch1: system-config-printer-no-applet-in-gnome.patch +Patch2: system-config-printer-check-device-ids.patch BuildRequires: cups-devel >= 1.2 BuildRequires: desktop-file-utils >= 0.2.92 BuildRequires: gettext-devel @@ -71,6 +72,9 @@ printers. # Don't start the applet in GNOME. %patch1 -p1 -b .no-applet-in-gnome +# Improvements for check-device-ids from upstream. +%patch2 -p1 -b .check-device-ids + %build %configure --with-udev-rules @@ -180,6 +184,7 @@ exit 0 %changelog * Tue Mar 22 2011 Tim Waugh 1.3.2-2 +- Improvements for check-device-ids from upstream. - Don't start the applet in GNOME at all (bug #677676), now that GNOME Shell is capable of handling New Printer notifications. (Note that automatic driver installation won't work until GNOME Shell implements