changeset 2f323425ec8d in /home/hg/repos/gajim
details:http://hg.gajim.org/gajim?cmd=changeset;node=2f323425ec8d description: fix dcraven images so top and bottom offset is the same on all images. Fixes #6870
diffstat:
data/iconsets/dcraven/32x32/chat.png | 0 data/iconsets/dcraven/32x32/dnd.png | 0 data/iconsets/dcraven/32x32/error.png | 0 data/iconsets/dcraven/32x32/not_in_roster.png | 0 data/iconsets/dcraven/32x32/offline.png | 0 data/iconsets/dcraven/32x32/online.png | 0 plugins/snarl_notifications/plugin.py | 25 +--- src/chat_control.py | 2 +- src/common/connection_handlers.py | 1 + src/common/connection_handlers_events.py | 154 ++++++++++++++++++++++++ src/common/gajim.py | 3 + src/common/ged.py | 17 +- src/common/nec.py | 8 +- src/disco.py | 1 - src/groupchat_control.py | 23 +++- src/notify.py | 27 ++++ src/roster_window.py | 40 ++++++ src/session.py | 162 +++++++++++++++---------- 18 files changed, 362 insertions(+), 101 deletions(-)
diffs (truncated from 689 to 300 lines):
diff -r e821efda06c2 -r 2f323425ec8d data/iconsets/dcraven/32x32/chat.png Binary file data/iconsets/dcraven/32x32/chat.png has changed diff -r e821efda06c2 -r 2f323425ec8d data/iconsets/dcraven/32x32/dnd.png Binary file data/iconsets/dcraven/32x32/dnd.png has changed diff -r e821efda06c2 -r 2f323425ec8d data/iconsets/dcraven/32x32/error.png Binary file data/iconsets/dcraven/32x32/error.png has changed diff -r e821efda06c2 -r 2f323425ec8d data/iconsets/dcraven/32x32/not_in_roster.png Binary file data/iconsets/dcraven/32x32/not_in_roster.png has changed diff -r e821efda06c2 -r 2f323425ec8d data/iconsets/dcraven/32x32/offline.png Binary file data/iconsets/dcraven/32x32/offline.png has changed diff -r e821efda06c2 -r 2f323425ec8d data/iconsets/dcraven/32x32/online.png Binary file data/iconsets/dcraven/32x32/online.png has changed diff -r e821efda06c2 -r 2f323425ec8d plugins/snarl_notifications/plugin.py --- a/plugins/snarl_notifications/plugin.py Wed Apr 27 17:19:42 2011 +0200 +++ b/plugins/snarl_notifications/plugin.py Fri Apr 29 21:29:50 2011 +0200 @@ -45,7 +45,7 @@ #self.gui_extension_points = {} #self.config_default_values = {}
- self.events_handlers = {'NewMessage' : (ged.POSTCORE, self.newMessage)} + self.events_handlers = {'notification' : (ged.POSTCORE, self.notif)}
@log_calls('SnarlNotificationsPlugin') def activate(self): @@ -56,29 +56,12 @@ pass
@log_calls('SnarlNotificationsPlugin') - def newMessage(self, args): - event_name = "NewMessage" - data = args - account = data[0] - jid = data[1][0] - jid_without_resource = gajim.get_jid_without_resource(jid) - msg = data[1][1] - msg_type = data[1][4] - if msg_type == 'chat': - nickname = gajim.get_contact_name_from_jid(account, jid_without_resource) - elif msg_type in ('pm', 'groupchat'): - nickname = gajim.get_resource_from_jid(jid) - else: - nickname = jid - - print "Event '%s' occured. Arguments: %s\n\n===\n"%(event_name, pformat(args)) - print "Event '%s' occured. Arguments: \naccount = %s\njid = %s\nmsg = %s\nnickname = %s"%( - event_name, account, jid, msg, nickname) - + def notif(self, obj): + print "Event '%s' occured.\n\n===\n" % obj.popup_event_type
#if PySnarl.snGetVersion() != False: #(major, minor) = PySnarl.snGetVersion() #print "Found Snarl version",str(major)+"."+str(minor),"running." - #PySnarl.snShowMessage(nickname, msg[:20]+'...') + #PySnarl.snShowMessage(obj.popup_title, obj.popup_text) #else: #print "Sorry Snarl does not appear to be running" diff -r e821efda06c2 -r 2f323425ec8d src/chat_control.py --- a/src/chat_control.py Wed Apr 27 17:19:42 2011 +0200 +++ b/src/chat_control.py Fri Apr 29 21:29:50 2011 +0200 @@ -2954,7 +2954,7 @@ if len(data) > 6 and isinstance(data[6], int): message_ids.append(data[6])
- if len(data) > 8: + if len(data) > 8 and not self.session: self.set_session(data[8]) if message_ids: gajim.logger.set_read_messages(message_ids) diff -r e821efda06c2 -r 2f323425ec8d src/common/connection_handlers.py --- a/src/common/connection_handlers.py Wed Apr 27 17:19:42 2011 +0200 +++ b/src/common/connection_handlers.py Fri Apr 29 21:29:50 2011 +0200 @@ -1240,6 +1240,7 @@ gajim.nec.register_incoming_event(ArchivingErrorReceivedEvent) gajim.nec.register_incoming_event( ArchivingPreferencesChangedReceivedEvent) + gajim.nec.register_incoming_event(NotificationEvent)
gajim.ged.register_event_handler('http-auth-received', ged.CORE, self._nec_http_auth_received) diff -r e821efda06c2 -r 2f323425ec8d src/common/connection_handlers_events.py --- a/src/common/connection_handlers_events.py Wed Apr 27 17:19:42 2011 +0200 +++ b/src/common/connection_handlers_events.py Fri Apr 29 21:29:50 2011 +0200 @@ -35,6 +35,8 @@ from common.logger import LOG_DB_PATH from common.pep import SUPPORTED_PERSONAL_USER_EVENTS
+import gtkgui_helpers + import logging log = logging.getLogger('gajim.c.connection_handlers_events')
@@ -1888,3 +1890,155 @@ self.prompt = None self.prompt_jid = None return True + +class NotificationEvent(nec.NetworkIncomingEvent): + name = 'notification' + base_network_events = ['decrypted-message-received', 'gc-message-received'] + + def detect_type(self): + if self.base_event.name == 'decrypted-message-received': + self.notif_type = 'msg' + if self.base_event.name == 'gc-message-received': + self.notif_type = 'gc-msg' + + def get_focused(self): + self.control_focused = False + if self.control: + parent_win = self.control.parent_win + if parent_win and self.control == parent_win.get_active_control() \ + and parent_win.window.has_focus: + self.control_focused = True + + def handle_incoming_msg_event(self, msg_obj): + if not msg_obj.msgtxt: + return + self.jid = msg_obj.jid + if msg_obj.session: + self.control = msg_obj.session.control + else: + self.control = None + self.get_focused() + # This event has already been added to event list + if not self.control and len(gajim.events.get_events(self.conn.name, \ + self.jid, [msg_obj.mtype])) <= 1: + self.first_unread = True + + if msg_obj.mtype == 'pm': + nick = msg_obj.resource + else: + nick = gajim.get_name_from_jid(self.conn.name, self.jid) + + if self.first_unread: + self.sound_event = 'first_message_received' + elif self.control_focused: + self.sound_event = 'next_message_received_focused' + else: + self.sound_event = 'next_message_received_unfocused' + + if gajim.config.get('notification_preview_message'): + self.popup_text = msg_obj.msgtxt + if self.popup_text and (self.popup_text.startswith('/me ') or \ + self.popup_text.startswith('/me\n')): + self.popup_text = '* ' + nick + self.popup_text[3:] + else: + # We don't want message preview, do_preview = False + self.popup_text = '' + if msg_obj.mtype == 'normal': # single message + self.popup_event_type = _('New Single Message') + self.popup_image = 'gajim-single_msg_recv' + self.popup_title = _('New Single Message from %(nickname)s') % \ + {'nickname': nick} + elif msg_obj.mtype == 'pm': + self.popup_event_type = _('New Private Message') + self.popup_image = 'gajim-priv_msg_recv' + self.popup_title = _('New Private Message from group chat %s') % \ + msg_obj.jid + if self.popup_text: + self.popup_text = _('%(nickname)s: %(message)s') % \ + {'nickname': nick, 'message': self.popup_text} + else: + self.popup_text = _('Messaged by %(nickname)s') % \ + {'nickname': nick} + else: # chat message + self.popup_event_type = _('New Message') + self.popup_image = 'gajim-chat_msg_recv' + self.popup_title = _('New Message from %(nickname)s') % \ + {'nickname': nick} + + self.popup_image = gtkgui_helpers.get_icon_path(self.popup_image, 48) + + if not gajim.config.get('notify_on_new_message') or \ + not self.first_unread: + self.do_popup = False + elif gajim.config.get('autopopupaway'): + # always show notification + self.do_popup = True + elif gajim.connections[self.conn.name].connected in (2, 3): + # we're online or chat + self.do_popup = True + + if self.first_unread and helpers.allow_sound_notification( + self.conn.name, 'first_message_received'): + self.do_sound = True + elif not self.first_unread and self.control_focused and \ + helpers.allow_sound_notification(self.conn.name, + 'next_message_received_focused'): + self.do_sound = True + elif not self.first_unread and not self.control_focused and \ + helpers.allow_sound_notification(self.conn.name, + 'next_message_received_unfocused'): + self.do_sound = True + + def handle_incoming_gc_msg_event(self, msg_obj): + sound = msg_obj.msg_obj.gc_control.highlighting_for_message( + msg_obj.msgtxt, msg_obj.timestamp)[1] + self.do_sound = True + if sound == 'received': + self.sound_event = 'muc_message_received' + elif sound == 'highlight': + self.sound_event = 'muc_message_highlight' + else: + self.do_sound = False + + self.do_popup = False + + def handle_incoming_pres_event(self, msg_obj): + pass + + def generate(self): + # what's needed to compute output + self.conn = self.base_event.conn + self.control = None + self.control_focused = False + self.first_unread = False + + # For output + self.do_sound = False + self.sound_file = '' + self.sound_event = '' # gajim sound played if not sound_file is set + self.show_popup = False + + self.do_popup = False + self.popup_title = '' + self.popup_text = '' + self.popup_event_type = '' + self.popup_msg_type = '' + self.popup_image = '' + + self.do_command = False + self.command = '' + + self.open_chat = False + self.activate_urgency_hint = False + self.show_in_notification_area = False + self.show_in_roster = False + + self.detect_type() + + if self.notif_type == 'msg': + self.handle_incoming_msg_event(self.base_event) + elif self.notif_type == 'gc-msg': + self.handle_incoming_gc_msg_event(self.base_event) + elif self.notif_type == 'pres': + self.handle_incoming_pres_event(self.base_event) + return True diff -r e821efda06c2 -r 2f323425ec8d src/common/gajim.py --- a/src/common/gajim.py Wed Apr 27 17:19:42 2011 +0200 +++ b/src/common/gajim.py Fri Apr 29 21:29:50 2011 +0200 @@ -35,6 +35,7 @@ import xmpp import defs import common.ged +import notify
interface = None # The actual interface (the gtk one for the moment) thread_interface = None # Interface to run a thread and then a callback @@ -105,6 +106,8 @@
events = Events()
+notification = notify.Notification() + nicks = {} # list of our nick names in each account # should we block 'contact signed in' notifications for this account? # this is only for the first 30 seconds after we change our show diff -r e821efda06c2 -r 2f323425ec8d src/common/ged.py --- a/src/common/ged.py Wed Apr 27 17:19:42 2011 +0200 +++ b/src/common/ged.py Fri Apr 29 21:29:50 2011 +0200 @@ -27,12 +27,17 @@ import logging log = logging.getLogger('gajim.common.ged')
-PRECORE = 30 -CORE = 40 -POSTCORE = 50 +PRECORE = 10 +CORE = 20 +POSTCORE = 30 +PREGUI = 40 +PREGUI1 = 50 GUI1 = 60 -GUI2 = 70 -POSTGUI = 80 +POSTGUI1 = 70 +PREGUI2 = 80 +GUI2 = 90 +POSTGUI2 = 100 +POSTGUI = 110
class GlobalEventsDispatcher(object):
@@ -68,4 +73,4 @@ if event_name in self.handlers: for priority, handler in self.handlers[event_name]: if handler(*args, **kwargs): - return + return True