3
"""Run the bzr tray icon.
5
This is a background program which will pop up a notification on the users
6
screen when a commit occurs.
9
from bzrlib.plugin import load_plugins
12
from bzrlib.plugins.gtk import open_display, icon_path
14
from bzrlib.plugins.gtk.notify import NotifyPopupMenu
16
menu = NotifyPopupMenu()
17
icon = gtk.status_icon_new_from_file(icon_path("bzr-icon-64.png"))
18
icon.connect('popup-menu', menu.display)
19
icon.set_visible(False)
26
from bzrlib.bzrdir import BzrDir
27
from bzrlib import errors
28
from bzrlib.osutils import format_date
29
from bzrlib.transport import get_transport
30
if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
32
BROADCAST_INTERFACE = "org.bazaarvcs.plugins.dbus.Broadcast"
33
bus = dbus.SessionBus()
36
icon.set_visible(False)
38
def catch_branch(revision_id, urls):
39
# TODO: show all the urls, or perhaps choose the 'best'.
42
if isinstance(revision_id, unicode):
43
revision_id = revision_id.encode('utf8')
44
transport = get_transport(url)
45
a_dir = BzrDir.open_from_transport(transport)
46
branch = a_dir.open_branch()
47
revno = branch.revision_id_to_revno(revision_id)
48
revision = branch.repository.get_revision(revision_id)
49
summary = 'New revision %d in %s' % (revno, url)
50
body = 'Committer: %s\n' % revision.committer
51
body += 'Date: %s\n' % format_date(revision.timestamp,
54
body += revision.message
55
body = cgi.escape(body)
56
nw = pynotify.Notification(summary, body)
57
def start_viz(notification=None, action=None, data=None):
58
"""Start the viz program."""
59
pp = start_viz_window(branch, revision_id)
61
def start_branch(notification=None, action=None, data=None):
62
"""Start a Branch dialog"""
63
from bzrlib.plugins.gtk.branch import BranchDialog
64
bd = BranchDialog(remote_path=url)
66
if "actions" in pynotify.get_server_caps():
67
nw.add_action("inspect", "Inspect", start_viz, None)
68
nw.add_action("branch", "Branch", start_branch, None)
69
icon.set_visible(True)
70
gobject.timeout_add(5000, hide_icon)
76
bus.add_signal_receiver(catch_branch,
77
dbus_interface=BROADCAST_INTERFACE,
78
signal_name="Revision")
79
pynotify.init("bzr-notify")