changeset c4b4c5ae247d in /home/hg/repos/gajim

details:http://hg.gajim.org/gajim?cmd=changeset;node=c4b4c5ae247d
description: use NEC to handle gc subject events

diffstat:

 src/common/connection_handlers.py        |   6 -----
 src/common/connection_handlers_events.py |  22 ++++++++++++++++--
 src/groupchat_control.py                 |  19 ++++++++++++++++
 src/gui_interface.py                     |  37 --------------------------------
 src/roster_window.py                     |   9 +++++++
 5 files changed, 47 insertions(+), 46 deletions(-)

diffs (189 lines):

diff -r c012deab94ed -r c4b4c5ae247d src/common/connection_handlers.py
--- a/src/common/connection_handlers.py Sat Nov 27 18:21:31 2010 +0100
+++ b/src/common/connection_handlers.py Sat Nov 27 19:12:43 2010 +0100
@@ -1580,12 +1580,6 @@
     def dispatch_gc_message(self, msg, frm, msgtxt, jid, tim):
         has_timestamp = bool(msg.timestamp)
 
-        subject = msg.getSubject()
-
-        if subject is not None:
-            self.dispatch('GC_SUBJECT', (frm, subject, msgtxt, has_timestamp))
-            return
-
         statusCode = msg.getStatusCode()
 
         if not msg.getTag('body'): # no <body>
diff -r c012deab94ed -r c4b4c5ae247d src/common/connection_handlers_events.py
--- a/src/common/connection_handlers_events.py  Sat Nov 27 18:21:31 2010 +0100
+++ b/src/common/connection_handlers_events.py  Sat Nov 27 19:12:43 2010 +0100
@@ -1051,6 +1051,7 @@
         self.msgtxt = self.msg_obj.msgtxt
         self.jid = self.msg_obj.jid
         self.room_jid = self.msg_obj.jid
+        self.nickname = self.msg_obj.resource
         self.timestamp = self.msg_obj.timestamp
         self.xhtml_msgtxt = self.stanza.getXHTML()
 
@@ -1069,8 +1070,8 @@
         self.subject = self.stanza.getSubject()
 
         if self.subject is not None:
-            self.conn.dispatch('GC_SUBJECT', (self.fjid, self.subject,
-                self.msgtxt, self.has_timestamp))
+            gajim.nec.push_incoming_event(GcSubjectReceivedEvent(None,
+                conn=self.conn, msg_event=self))
             return
 
         self.status_code = self.stanza.getStatusCode()
@@ -1117,6 +1118,21 @@
 
         return True
 
+class GcSubjectReceivedEvent(nec.NetworkIncomingEvent):
+    name = 'gc-subject-received'
+    base_network_events = []
+
+    def generate(self):
+        self.conn = self.msg_event.conn
+        self.stanza = self.msg_event.stanza
+        self.room_jid = self.msg_event.room_jid
+        self.nickname = self.msg_event.nickname
+        self.fjid = self.msg_event.fjid
+        self.subject = self.msg_event.subject
+        self.msgtxt = self.msg_event.msgtxt
+        self.has_timestamp = self.msg_event.has_timestamp
+        return True
+
 class MessageSentEvent(nec.NetworkIncomingEvent):
     name = 'message-sent'
     base_network_events = []
@@ -1479,7 +1495,7 @@
 class VcardReceivedEvent(nec.NetworkIncomingEvent):
     name = 'vcard-received'
     base_network_events = []
-    
+
     def generate(self):
         self.nickname = None
         if 'NICKNAME' in self.vcard_dict:
diff -r c012deab94ed -r c4b4c5ae247d src/groupchat_control.py
--- a/src/groupchat_control.py  Sat Nov 27 18:21:31 2010 +0100
+++ b/src/groupchat_control.py  Sat Nov 27 19:12:43 2010 +0100
@@ -460,6 +460,8 @@
             self._nec_vcard_published)
         gajim.ged.register_event_handler('vcard-received', ged.GUI1,
             self._nec_vcard_received)
+        gajim.ged.register_event_handler('gc-subject-received', ged.GUI1,
+            self._nec_gc_subject_received)
         gajim.gc_connected[self.account][self.room_jid] = False
         # disable win, we are not connected yet
         ChatControlBase.got_disconnected(self)
@@ -1176,6 +1178,19 @@
         self.subject = subject
         self.draw_banner_text()
 
+    def _nec_gc_subject_received(self, obj):
+        if obj.conn.name != self.account:
+            return
+        if obj.room_jid != self.room_jid:
+            return
+        self.set_subject(obj.subject)
+        text = _('%(nick)s has set the subject to %(subject)s') % {
+            'nick': obj.nickname, 'subject': obj.subject}
+        if obj.has_timestamp:
+            self.print_old_conversation(text)
+        else:
+            self.print_conversation(text)
+
     def got_connected(self):
         # Make autorejoin stop.
         if self.autorejoin:
@@ -1797,6 +1812,10 @@
             self._nec_gc_message_received)
         gajim.ged.remove_event_handler('vcard-published', ged.GUI1,
             self._nec_vcard_published)
+        gajim.ged.remove_event_handler('vcard-received', ged.GUI1,
+            self._nec_vcard_received)
+        gajim.ged.remove_event_handler('gc-subject-received', ged.GUI1,
+            self._nec_gc_subject_received)
 
         if self.room_jid in gajim.gc_connected[self.account] and \
         gajim.gc_connected[self.account][self.room_jid]:
diff -r c012deab94ed -r c4b4c5ae247d src/gui_interface.py
--- a/src/gui_interface.py      Sat Nov 27 18:21:31 2010 +0100
+++ b/src/gui_interface.py      Sat Nov 27 19:12:43 2010 +0100
@@ -593,42 +593,6 @@
             if self.roster.tooltip.id and self.roster.tooltip.win:
                 self.roster.tooltip.update_last_time(last_time)
 
-    def handle_event_gc_subject(self, account, array):
-        #('GC_SUBJECT', account, (jid, subject, body, has_timestamp))
-        jids = array[0].split('/', 1)
-        jid = jids[0]
-
-        gc_control = self.msg_win_mgr.get_gc_control(jid, account)
-
-        if not gc_control and \
-        jid in self.minimized_controls[account]:
-            gc_control = self.minimized_controls[account][jid]
-
-        contact = gajim.contacts.\
-                get_contact_with_highest_priority(account, jid)
-        if contact:
-            contact.status = array[1]
-            self.roster.draw_contact(jid, account)
-
-        if not gc_control:
-            return
-        gc_control.set_subject(array[1])
-        # Standard way, the message comes from the occupant who set the subject
-        text = None
-        if len(jids) > 1:
-            text = _('%(jid)s has set the subject to %(subject)s') % {
-                    'jid': jids[1], 'subject': array[1]}
-        # Workaround for psi bug http://flyspray.psi-im.org/task/595 , to be
-        # deleted one day. We can receive a subject with a body that contains
-        # "X has set the subject to Y" ...
-        elif array[2]:
-            text = array[2]
-        if text is not None:
-            if array[3]:
-                gc_control.print_old_conversation(text)
-            else:
-                gc_control.print_conversation(text)
-
     def handle_event_gc_config(self, obj):
         #('GC_CONFIG', account, (jid, form_node))  config is a dict
         account = obj.conn.name
@@ -1502,7 +1466,6 @@
             'MSGERROR': [self.handle_event_msgerror],
             'REGISTER_AGENT_INFO': [self.handle_event_register_agent_info],
             'AGENT_INFO_ITEMS': [self.handle_event_agent_info_items],
-            'GC_SUBJECT': [self.handle_event_gc_subject],
             'GC_CONFIG_CHANGE': [self.handle_event_gc_config_change],
             'FILE_REQUEST': [self.handle_event_file_request],
             'FILE_REQUEST_ERROR': [self.handle_event_file_request_error],
diff -r c012deab94ed -r c4b4c5ae247d src/roster_window.py
--- a/src/roster_window.py      Sat Nov 27 18:21:31 2010 +0100
+++ b/src/roster_window.py      Sat Nov 27 19:12:43 2010 +0100
@@ -2507,6 +2507,13 @@
             return
         self.draw_avatar(obj.jid, obj.conn.name)
 
+    def _nec_gc_subject_received(self, obj):
+        contact = gajim.contacts.get_contact_with_highest_priority(
+            obj.conn.name, obj.room_jid)
+        if contact:
+            contact.status = obj.subject
+            self.draw_contact(obj.room_jid, obj.conn.name)
+
 
################################################################################
 ### Menu and GUI callbacks
 ### FIXME: order callbacks in itself...
@@ -6262,3 +6269,5 @@
             self._nec_pep_received)
         gajim.ged.register_event_handler('vcard-received', ged.GUI1,
             self._nec_vcard_received)
+        gajim.ged.register_event_handler('gc-subject-received', ged.GUI1,
+            self._nec_gc_subject_received)
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to