Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1
system-config-printer
system-config-printer-cups-autoconfig-notificat...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File system-config-printer-cups-autoconfig-notifications.patch of Package system-config-printer
diff --git a/applet.py b/applet.py index 8cb90ab..1b27654 100644 --- a/applet.py +++ b/applet.py @@ -220,6 +220,101 @@ class NewPrinterNotification(dbus.service.Object): return False +#### +#### Integration with cups-autoconfig +#### +#### Based on code from http://redclay.altervista.org/wiki/doku.php?id=projects:hal-automount + +class NewPrinterNotificationCupsAutoconfig: + + def __init__ (self, bus): + self.bus = bus + self.bus.add_signal_receiver(self.device_added, + 'DeviceAdded', + 'org.freedesktop.Hal.Manager', + 'org.freedesktop.Hal', + '/org/freedesktop/Hal/Manager') + + def udi_to_device (self, udi): + device_obj = self.bus.get_object('org.freedesktop.Hal', udi) + return dbus.Interface (device_obj, 'org.freedesktop.Hal.Device') + + def device_added (self, udi): + try: + properties = self.udi_to_device(udi).GetAllProperties() + capabilities = properties.get('info.capabilities') + if not capabilities: + return + + for capability in capabilities: + if capability == u'printer': + self.printer_added (udi, properties) + break + + except Exception, e: + print >> sys.stderr, "Error in cups-autoconfig integration: %s" % e + + def printer_added (self, udi, properties): + if properties.get('printer.configured_existing'): + return + + if properties.get('printer.configured'): + title = _("Printer added") + name = properties.get('printer.display_name') + text = _("`%s' is ready for printing.") % name + + n = pynotify.Notification (title, text, 'printer') + n.set_urgency (pynotify.URGENCY_NORMAL) + n.add_action ("configure", _("Configure"), + lambda x, y: self.configure (x, y, name)) + + else: + title = _("Printer plugged") + text = _("The printer could not be automatically configured.") % name + + n = pynotify.Notification (title, text, 'printer') + n.set_urgency (pynotify.URGENCY_NORMAL) + n.add_action ("configure", _("Configure"), + lambda x, y: self.launch (x, y)) + + n.show () + + def configure (self, notification, action, name): + self.run_config_tool (["--configure-printer", name]) + + def launch (self, notification, action): + self.run_config_tool ([]) + + def run_config_tool (self, argv): + import os + pid = os.fork () + if pid == 0: + # Child. + cmd = "/usr/bin/system-config-printer" + argv.insert (0, cmd) + os.execvp (cmd, argv) + sys.exit (1) + elif pid == -1: + print "Error forking process" + else: + gobject.timeout_add (60 * 1000, self.collect_exit_code, pid) + + def collect_exit_code (self, pid): + # We do this with timers instead of signals because we already + # have gobject imported, but don't (yet) import signal; + # let's try not to inflate the process size. + import os + try: + print "Waiting for child %d" % pid + (pid, status) = os.waitpid (pid, os.WNOHANG) + if pid == 0: + # Run this timer again. + return True + except OSError: + pass + + return False + PROGRAM_NAME="system-config-printer-applet" def show_help (): print "usage: %s [--no-tray-icon]" % PROGRAM_NAME @@ -303,6 +398,17 @@ if __name__ == '__main__': except: pass + try: + NewPrinterNotificationCupsAutoconfig(bus) + service_running = True + except: + try: + print >> sys.stderr, \ + "%s: failed to start NewPrinterNotificationCupsAutoconfig service" % \ + PROGRAM_NAME + except: + pass + if trayicon and get_debugging () == False: # Start off just waiting for print jobs. def any_jobs ():
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor