/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to __init__.py

  • Committer: Robert Collins
  • Date: 2007-03-23 12:46:47 UTC
  • mto: This revision was merged to the branch mainline in revision 182.
  • Revision ID: robertc@robertcollins.net-20070323124647-207i76uksk65l622
Add new command 'commit-notify' to listen for commits on dbus and show them via pynotify.

Show diffs side-by-side

added added

removed removed

Lines of Context:
100
100
            if str(e) == "could not open display":
101
101
                raise NoDisplayError
102
102
        set_ui_factory()
 
103
        return gtk
103
104
 
104
105
    def run(self):
105
106
        self.open_display()
401
402
register_command(cmd_gpreferences)
402
403
 
403
404
 
 
405
class cmd_commit_notify(GTKCommand):
 
406
    """Run the bzr commit notifier.
 
407
 
 
408
    This is a background program which will pop up a notification on the users
 
409
    screen when a commit occurs.
 
410
    """
 
411
 
 
412
    def run(self):
 
413
        gtk = self.open_display()
 
414
        import cgi
 
415
        import dbus
 
416
        import dbus.service
 
417
        import pynotify
 
418
        from bzrlib.bzrdir import BzrDir
 
419
        from bzrlib import errors
 
420
        from bzrlib.osutils import format_date
 
421
        from bzrlib.transport import get_transport
 
422
        if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
 
423
            import dbus.glib
 
424
        from bzrlib.plugins.dbus import activity
 
425
        bus = dbus.SessionBus()
 
426
        # get the object so we can subscribe to callbacks from it.
 
427
        broadcast_service = bus.get_object(
 
428
            activity.Broadcast.DBUS_NAME,
 
429
            activity.Broadcast.DBUS_PATH)
 
430
        def catch_branch(revision_id, url):
 
431
            try:
 
432
                if isinstance(revision_id, unicode):
 
433
                    revision_id = revision_id.encode('utf8')
 
434
                transport = get_transport(url)
 
435
                try:
 
436
                    transport.local_abspath('.')
 
437
                except errors.TransportNotPossible:
 
438
                    # dont show remote urls for now.
 
439
                    return
 
440
                # here we should:
 
441
                a_dir = BzrDir.open_from_transport(transport)
 
442
                branch = a_dir.open_branch()
 
443
                revno = branch.revision_id_to_revno(revision_id)
 
444
                revision = branch.repository.get_revision(revision_id)
 
445
                summary = 'New revision %d in %s' % (revno, url)
 
446
                body  = 'Committer: %s\n' % revision.committer
 
447
                body += 'Date: %s\n' % format_date(revision.timestamp,
 
448
                    revision.timezone)
 
449
                body += '\n'
 
450
                body += revision.message
 
451
                body = cgi.escape(body)
 
452
                #print repr(body)
 
453
                nw = pynotify.Notification(summary, body)
 
454
                nw.set_timeout(5000)
 
455
                nw.show()
 
456
            except Exception, e:
 
457
                print e
 
458
                raise
 
459
        broadcast_service.connect_to_signal("Revision", catch_branch,
 
460
            dbus_interface=activity.Broadcast.DBUS_INTERFACE)
 
461
        pynotify.init("bzr commit-notify")
 
462
        gtk.main()
 
463
 
 
464
register_command(cmd_commit_notify)
 
465
 
 
466
 
404
467
import gettext
405
468
gettext.install('olive-gtk')
406
469