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
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to