commit missing file
This commit is contained in:
parent
3556d134bd
commit
3084820130
|
@ -0,0 +1,149 @@
|
||||||
|
#!/bin/sh
|
||||||
|
## notify.py
|
||||||
|
##
|
||||||
|
## Gajim Team:
|
||||||
|
## - Yann Le Boulanger <asterix@lagaule.org>
|
||||||
|
## - Vincent Hanquez <tab@snarc.org>
|
||||||
|
## - Nikos Kouremenos <kourem@gmail.com>
|
||||||
|
## - Dimitur Kirov <dkirov@gmail.com>
|
||||||
|
## - Andrew Sayman <lorien420@myrealbox.com>
|
||||||
|
##
|
||||||
|
## Copyright (C) 2003-2005 Gajim Team
|
||||||
|
##
|
||||||
|
## DBUS/libnotify connection code:
|
||||||
|
## Copyright (C) 2005 by Sebastian Estienne
|
||||||
|
##
|
||||||
|
## This program 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; version 2 only.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU General Public License for more details.
|
||||||
|
##
|
||||||
|
|
||||||
|
DBUS_MODULE = True
|
||||||
|
|
||||||
|
try:
|
||||||
|
import dbus
|
||||||
|
except ImportError:
|
||||||
|
DBUS_MODULE = False
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import gajim
|
||||||
|
import dialogs
|
||||||
|
|
||||||
|
from common import gajim
|
||||||
|
from common import i18n
|
||||||
|
i18n.init()
|
||||||
|
_ = i18n._
|
||||||
|
|
||||||
|
|
||||||
|
def dbus_get_interface():
|
||||||
|
try:
|
||||||
|
session_bus = dbus.SessionBus()
|
||||||
|
obj = session_bus.get_object('org.freedesktop.Notifications',
|
||||||
|
'/org/freedesktop/Notifications')
|
||||||
|
return dbus.Interface(obj, 'org.freedesktop.Notifications')
|
||||||
|
except Exception, e:
|
||||||
|
return None
|
||||||
|
except dbus.dbus_bindings.DBusException, e:
|
||||||
|
# This exception could give useful info about why notification breaks
|
||||||
|
print >> sys.stderr, e
|
||||||
|
return None
|
||||||
|
|
||||||
|
def dbus_available():
|
||||||
|
if not DBUS_MODULE:
|
||||||
|
return False
|
||||||
|
if dbus_get_interface() is None:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
|
||||||
|
def dbus_notify(event_type, jid, account, msg_type = '', file_props = None):
|
||||||
|
if jid in gajim.contacts[account]:
|
||||||
|
txt = gajim.get_highest_prio_contact_from_contacts(
|
||||||
|
gajim.contacts[account][jid]).name
|
||||||
|
else:
|
||||||
|
txt = jid
|
||||||
|
|
||||||
|
img = 'chat.png' # img to display
|
||||||
|
ntype = 'im' # Notification Type
|
||||||
|
|
||||||
|
if event_type == _('Contact Signed In'):
|
||||||
|
img = 'online.png'
|
||||||
|
ntype = 'presence.online'
|
||||||
|
elif event_type == _('Contact Signed Out'):
|
||||||
|
img = 'offline.png'
|
||||||
|
ntype = 'presence.offline'
|
||||||
|
elif event_type in (_('New Message'), _('New Single Message'),
|
||||||
|
_('New Private Message')):
|
||||||
|
img = 'chat.png' # FIXME: better img and split events
|
||||||
|
ntype = 'im.received'
|
||||||
|
if event_type == _('New Private Message'):
|
||||||
|
room_jid, nick = gajim.get_room_and_nick_from_fjid(jid)
|
||||||
|
room_name,t = gajim.get_room_name_and_server_from_room_jid(room_jid)
|
||||||
|
txt = _('From %s in room %s') % (nick, room_name)
|
||||||
|
else:
|
||||||
|
txt = _('From %s') % txt
|
||||||
|
elif event_type == _('File Transfer Request'):
|
||||||
|
img = 'requested.png' # FIXME: better img
|
||||||
|
ntype = 'transfer'
|
||||||
|
txt = _('From %s') % txt
|
||||||
|
elif event_type == _('File Transfer Error'):
|
||||||
|
img = 'error.png' # FIXME: better img
|
||||||
|
ntype = 'transfer.error'
|
||||||
|
elif event_type in (_('File Transfer Completed'), _('File Transfer Stopped')):
|
||||||
|
img = 'closed.png' # # FIXME: better img and split events
|
||||||
|
ntype = 'transfer.complete'
|
||||||
|
if file_props is not None:
|
||||||
|
if file_props['type'] == 'r':
|
||||||
|
# get the name of the sender, as it is in the roster
|
||||||
|
sender = unicode(file_props['sender']).split('/')[0]
|
||||||
|
name = gajim.get_first_contact_instance_from_jid(
|
||||||
|
account, sender).name
|
||||||
|
txt = _('From %s') % name
|
||||||
|
else:
|
||||||
|
receiver = file_props['receiver']
|
||||||
|
if hasattr(receiver, 'jid'):
|
||||||
|
receiver = receiver.jid
|
||||||
|
receiver = receiver.split('/')[0]
|
||||||
|
# get the name of the contact, as it is in the roster
|
||||||
|
name = gajim.get_first_contact_instance_from_jid(
|
||||||
|
account, receiver).name
|
||||||
|
txt = _('To %s') % name
|
||||||
|
else:
|
||||||
|
txt = ''
|
||||||
|
|
||||||
|
iconset = gajim.config.get('iconset')
|
||||||
|
if not iconset:
|
||||||
|
iconset = 'sun'
|
||||||
|
path = os.path.join(gajim.DATA_DIR, 'iconsets', iconset, '16x16', img)
|
||||||
|
path = os.path.abspath(path)
|
||||||
|
notif = dbus_get_interface()
|
||||||
|
if notif is None:
|
||||||
|
raise dbus.dbus_bindings.DBusException()
|
||||||
|
notif.Notify(dbus.String(_('Gajim')),
|
||||||
|
dbus.String(path), dbus.UInt32(0), ntype, dbus.Byte(0),
|
||||||
|
dbus.String(event_type), dbus.String(txt),
|
||||||
|
[dbus.String(path)], [''], [''], True, dbus.UInt32(3))
|
||||||
|
|
||||||
|
def notify(event_type, jid, account, msg_type = '', file_props = None):
|
||||||
|
if dbus_available():
|
||||||
|
try:
|
||||||
|
dbus_notify(event_type, jid, account, msg_type, file_props)
|
||||||
|
return
|
||||||
|
except dbus.dbus_bindings.DBusException, e:
|
||||||
|
# Connection to DBus failed, try popup
|
||||||
|
pass
|
||||||
|
except TypeError, e:
|
||||||
|
# This means that we sent the message incorrectly
|
||||||
|
print >> sys.stderr, e
|
||||||
|
instance = dialogs.PopupNotificationWindow(event_type, jid, account,
|
||||||
|
msg_type, file_props)
|
||||||
|
#roster = roster_window.RosterWindow()
|
||||||
|
gajim.interface.roster.popup_notification_windows.append(instance)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue