/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 bzr-notify

  • Committer: Curtis Hovey
  • Date: 2012-02-28 13:52:00 UTC
  • mfrom: (776.2.12 ui-factory)
  • Revision ID: sinzui.is@verizon.net-20120228135200-xzqb6qhtzck01doo
Merged GtkUIFactory additions and tweaks.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
 
 
3
"""Run the bzr tray icon.
 
4
 
 
5
This is a background program which will pop up a notification on the users
 
6
screen when a commit occurs.
 
7
"""
 
8
 
 
9
from bzrlib.plugin import load_plugins
 
10
load_plugins()
 
11
 
 
12
from bzrlib.plugins.gtk.commands import open_display
 
13
 
 
14
from bzrlib.plugins.gtk.notify import NotifyPopupMenu
 
15
Gtk = open_display()
 
16
 
 
17
import cgi
 
18
import sys
 
19
 
 
20
import dbus
 
21
import dbus.service
 
22
from gi.repository import GObject
 
23
from gi.repository import Notify
 
24
 
 
25
from bzrlib.bzrdir import BzrDir
 
26
from bzrlib.osutils import format_date
 
27
from bzrlib.transport import get_transport
 
28
 
 
29
menu = NotifyPopupMenu()
 
30
try:
 
31
    from gi.repository import AppIndicator3
 
32
except ImportError:
 
33
    icon = Gtk.StatusIcon.new_from_icon_name("bzr-panel")
 
34
    icon.connect('popup-menu', menu.display)
 
35
    icon.set_visible(False)
 
36
    hide_icon = lambda: icon.set_visible(False)
 
37
    show_icon = lambda: icon.set_visible(True)
 
38
else:
 
39
    indicator = AppIndicator3.Indicator.new(
 
40
        "bzr-gtk-notify", "bzr-panel", AppIndicator3.IndicatorCategory.OTHER)
 
41
    indicator.set_status (AppIndicator3.IndicatorStatus.PASSIVE)
 
42
    indicator.set_attention_icon("bzr-panel")
 
43
    indicator.set_menu(menu)
 
44
    hide_icon = lambda: indicator.set_status (
 
45
        AppIndicator3.IndicatorStatus.PASSIVE)
 
46
    show_icon = lambda: indicator.set_status (
 
47
        AppIndicator3.IndicatorStatus.ATTENTION)
 
48
 
 
49
if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
 
50
    import dbus.glib
 
51
BROADCAST_INTERFACE = "org.bazaarvcs.plugins.dbus.Broadcast"
 
52
bus = dbus.SessionBus()
 
53
 
 
54
def catch_branch(revision_id, urls):
 
55
    # TODO: show all the urls, or perhaps choose the 'best'.
 
56
    url = urls[0]
 
57
    try:
 
58
        if isinstance(revision_id, unicode):
 
59
            revision_id = revision_id.encode('utf8')
 
60
        transport = get_transport(url)
 
61
        a_dir = BzrDir.open_from_transport(transport)
 
62
        branch = a_dir.open_branch()
 
63
        revno = branch.revision_id_to_revno(revision_id)
 
64
        revision = branch.repository.get_revision(revision_id)
 
65
        summary = 'New revision %d in %s' % (revno, url)
 
66
        body = 'Committer: %s\n' % revision.committer
 
67
        body += 'Date: %s\n' % format_date(revision.timestamp,
 
68
            revision.timezone)
 
69
        body += '\n'
 
70
        body += revision.message
 
71
        body = cgi.escape(body)
 
72
        nw = Notify.Notification.new(summary, body, None)
 
73
        def start_viz(notification=None, action=None, data=None):
 
74
            """Start the viz program."""
 
75
            from bzrlib.plugins.gtk.commands import start_viz_window
 
76
            pp = start_viz_window(branch, revision_id)
 
77
            pp.show()
 
78
        def start_branch(notification=None, action=None, data=None):
 
79
            """Start a Branch dialog"""
 
80
            from bzrlib.plugins.gtk.branch import BranchDialog
 
81
            bd = BranchDialog(remote_path=url)
 
82
            bd.run()
 
83
        if "actions" in Notify.get_server_caps():
 
84
            nw.add_action("inspect", "Inspect", start_viz, None)
 
85
            nw.add_action("branch", "Branch", start_branch, None)
 
86
        show_icon()
 
87
        GObject.timeout_add(5000, hide_icon)
 
88
        nw.set_timeout(5000)
 
89
        nw.show()
 
90
    except Exception, e:
 
91
        print e
 
92
        raise
 
93
bus.add_signal_receiver(catch_branch,
 
94
                        dbus_interface=BROADCAST_INTERFACE,
 
95
                        signal_name="Revision")
 
96
Notify.init("bzr-notify")
 
97
 
 
98
if sys.argv[-1] == 'test':
 
99
    # Exit before main loop.
 
100
    sys.exit(0)
 
101
 
 
102
Gtk.main()