/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
699.2.7 by Andrew Starr-Bochicchio
Fix accidental shebang change in bzr-notify.
1
#!/usr/bin/env python
505.1.3 by Jelmer Vernooij
Move notify icon to a separate script so it's easier to add to startup scripts.
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
722 by Jelmer Vernooij
Fix imports.
12
from bzrlib.plugins.gtk.commands import open_display
13
from bzrlib.plugins.gtk import icon_path
505.1.3 by Jelmer Vernooij
Move notify icon to a separate script so it's easier to add to startup scripts.
14
553.1.1 by Jelmer Vernooij
Fix notify import.
15
from bzrlib.plugins.gtk.notify import NotifyPopupMenu
505.1.3 by Jelmer Vernooij
Move notify icon to a separate script so it's easier to add to startup scripts.
16
gtk = open_display()
17
18
import cgi
19
import dbus
20
import dbus.service
625.5.1 by James Westby
Import gobject in bzr-notify, as it is used there to set a timeout.
21
import gobject
505.1.3 by Jelmer Vernooij
Move notify icon to a separate script so it's easier to add to startup scripts.
22
import pynotify
23
from bzrlib.bzrdir import BzrDir
24
from bzrlib.osutils import format_date
25
from bzrlib.transport import get_transport
674.1.1 by Sense Hofstede
* Use Indicator Application rather than GtkStatusIcon
26
27
menu = NotifyPopupMenu()
682 by Jelmer Vernooij
Merge qense's indicator application work, but don't require appindicator to be installed.
28
try:
683.1.1 by Jelmer Vernooij
Fix formatting.
29
    import appindicator
682 by Jelmer Vernooij
Merge qense's indicator application work, but don't require appindicator to be installed.
30
except ImportError:
699.2.6 by Andrew Starr-Bochicchio
Use bzr-panel for gtk.status_icon.
31
    icon = gtk.status_icon_new_from_icon_name("bzr-panel")
683.1.1 by Jelmer Vernooij
Fix formatting.
32
    icon.connect('popup-menu', menu.display)
33
    icon.set_visible(False)
34
    hide_icon = lambda: icon.set_visible(False)
35
    show_icon = lambda: icon.set_visible(True)
682 by Jelmer Vernooij
Merge qense's indicator application work, but don't require appindicator to be installed.
36
else:
683.1.1 by Jelmer Vernooij
Fix formatting.
37
    indicator = appindicator.Indicator ("bzr-gtk-notify",
699.2.8 by Andrew Starr-Bochicchio
Re-merge on trunk, resolving one conflict.
38
        "bzr-panel", appindicator.CATEGORY_OTHER)
683.1.1 by Jelmer Vernooij
Fix formatting.
39
    indicator.set_status (appindicator.STATUS_PASSIVE)
699.2.2 by Andrew Starr-Bochicchio
Use panel icon.
40
    indicator.set_attention_icon("bzr-panel")
683.1.1 by Jelmer Vernooij
Fix formatting.
41
    indicator.set_menu(menu)
42
    hide_icon = lambda: indicator.set_status (appindicator.STATUS_PASSIVE)
43
    show_icon = lambda: indicator.set_status (appindicator.STATUS_ATTENTION)
674.1.1 by Sense Hofstede
* Use Indicator Application rather than GtkStatusIcon
44
505.1.3 by Jelmer Vernooij
Move notify icon to a separate script so it's easier to add to startup scripts.
45
if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
683.1.1 by Jelmer Vernooij
Fix formatting.
46
    import dbus.glib
505.1.3 by Jelmer Vernooij
Move notify icon to a separate script so it's easier to add to startup scripts.
47
BROADCAST_INTERFACE = "org.bazaarvcs.plugins.dbus.Broadcast"
48
bus = dbus.SessionBus()
49
50
def catch_branch(revision_id, urls):
683.1.1 by Jelmer Vernooij
Fix formatting.
51
    # TODO: show all the urls, or perhaps choose the 'best'.
52
    url = urls[0]
53
    try:
54
        if isinstance(revision_id, unicode):
55
            revision_id = revision_id.encode('utf8')
56
        transport = get_transport(url)
57
        a_dir = BzrDir.open_from_transport(transport)
58
        branch = a_dir.open_branch()
59
        revno = branch.revision_id_to_revno(revision_id)
60
        revision = branch.repository.get_revision(revision_id)
61
        summary = 'New revision %d in %s' % (revno, url)
62
        body = 'Committer: %s\n' % revision.committer
63
        body += 'Date: %s\n' % format_date(revision.timestamp,
64
            revision.timezone)
65
        body += '\n'
66
        body += revision.message
67
        body = cgi.escape(body)
68
        nw = pynotify.Notification(summary, body)
69
        def start_viz(notification=None, action=None, data=None):
70
            """Start the viz program."""
71
            from bzrlib.plugins.gtk.commands import start_viz_window
72
            pp = start_viz_window(branch, revision_id)
73
            pp.show()
74
        def start_branch(notification=None, action=None, data=None):
75
            """Start a Branch dialog"""
76
            from bzrlib.plugins.gtk.branch import BranchDialog
77
            bd = BranchDialog(remote_path=url)
78
            bd.run()
79
        if "actions" in pynotify.get_server_caps():
80
            nw.add_action("inspect", "Inspect", start_viz, None)
81
            nw.add_action("branch", "Branch", start_branch, None)
82
        show_icon()
83
        gobject.timeout_add(5000, hide_icon)
84
        nw.set_timeout(5000)
85
        nw.show()
86
    except Exception, e:
87
        print e
88
        raise
505.1.3 by Jelmer Vernooij
Move notify icon to a separate script so it's easier to add to startup scripts.
89
bus.add_signal_receiver(catch_branch,
683.1.1 by Jelmer Vernooij
Fix formatting.
90
                        dbus_interface=BROADCAST_INTERFACE,
91
                        signal_name="Revision")
505.1.3 by Jelmer Vernooij
Move notify icon to a separate script so it's easier to add to startup scripts.
92
pynotify.init("bzr-notify")
93
gtk.main()