1. Oben Sonne
  2. hg-autosync


hg-autosync / alerter / xdg-notification.py


# =============================================================================
#    hg-autosync - Mercurial autosync extension
#    Copyright (C) 2009 Oben Sonne <obensonne@googlemail.com>
#    This file is part of hg-autosync.
#    hg-autosync is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#    hg-autosync is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    GNU General Public License for more details.
#    You should have received a copy of the GNU General Public License
#    along with hg-autosync. If not, see <http://www.gnu.org/licenses/>.
# =============================================================================

"""Example alert tool for the Mercurial AutoSync extension.

This alerter can be used on recent Linux desktop systems.

It uses the freedesktop.org DBus notification interface to let a warning
message pop up in the notification area.

To test it, run

 $ python xdg-notification.py test-repo "bla bla"

To use it, set the autosync -> alert option in your global HGRC file or in an
autosync'ed repository's HGRC file to /path/to/xdg-notification.py. Or put (and
optionally rename) it somewhere in your path and just specify the tool's
filename for the alert option.


import sys

import dbus

NID = 1568793152 # just a random number
DURATION = 30 # seconds, set to 0 to show forever
ICON = "dialog-warning" # adjust as you like

def alert(repo, error):

    bus = dbus.SessionBus()
    proxy = bus.get_object("org.freedesktop.Notifications",
    notid = dbus.Interface(proxy, "org.freedesktop.Notifications")

    summary = "AutoSync"
    text = ("Problems in repository <b>%s</b>: <i>%s</i>." %
            (repo, error))

    notid.Notify("AutoSync", NID, ICON, summary, text, [], {}, DURATION)

if __name__ == '__main__':

    alert(sys.argv[1], sys.argv[2])