changeset 753a410ac0a7 in /home/hg/repos/gajim

details:http://hg.gajim.org/gajim?cmd=changeset;node=753a410ac0a7
description: Use central event_handler in Interface() instead of updating the 
GUI directly from XMPP callbacks.

diffstat:

 src/common/pep.py    |  70 ++++++++---------------------------
 src/gui_interface.py |  30 +++++++++++++++
 2 files changed, 46 insertions(+), 54 deletions(-)

diffs (160 lines):

diff -r 215709b1a929 -r 753a410ac0a7 src/common/pep.py
--- a/src/common/pep.py Sun Nov 15 10:55:31 2009 +0100
+++ b/src/common/pep.py Sun Nov 15 11:11:51 2009 +0100
@@ -230,8 +230,6 @@
                self._update_contacts(jid, account)
                if jid == common.gajim.get_jid_from_account(account):
                        self._update_account(account)
-               
-               self.do(jid, account)
        
        def _extract_info(self, items):
                '''To be implemented by subclasses'''
@@ -291,16 +289,6 @@
                                                
                retracted = items.getTag('retract') or not 'mood' in mood_dict  
        
                return (mood_dict, retracted)
-
-       def do(self, jid, name):
-
-               if jid == common.gajim.get_jid_from_account(name):
-                       common.gajim.interface.roster.draw_account(name)
-               common.gajim.interface.roster.draw_mood(jid, name)
-               ctrl = common.gajim.interface.msg_win_mgr.get_control(jid, name)
-               if ctrl:
-                       ctrl.update_mood()
-                       
        
        def asPixbufIcon(self):
                assert not self._retracted
@@ -341,16 +329,7 @@
                retracted = items.getTag('retract') or not ('artist' in 
tune_dict or 
                                                                                
                                                  'title' in tune_dict)
                return (tune_dict, retracted)
-               
-                                       
-       def do(self, jid, name):        
-               if jid == common.gajim.get_jid_from_account(name):
-                       common.gajim.interface.roster.draw_account(name)
-               common.gajim.interface.roster.draw_tune(jid, name)
-               ctrl = common.gajim.interface.msg_win_mgr.get_control(jid, name)
-               if ctrl:
-                       ctrl.update_tune()
-                       
+                               
        def asMarkupText(self):
                assert not self._retracted
                tune = self._pep_specific_data
@@ -397,20 +376,11 @@
                retracted = items.getTag('retract') or not activity_dict
                return (activity_dict, retracted)
                
-       def do(self, jid, name):
-       
-               if jid == common.gajim.get_jid_from_account(name):
-                       common.gajim.interface.roster.draw_account(name)
-               common.gajim.interface.roster.draw_activity(jid, name)
-               ctrl = common.gajim.interface.msg_win_mgr.get_control(jid, name)
-               if ctrl:
-                       ctrl.update_activity()
-       
-       
+                       
 class UserNicknamePEP(AbstractPEP):
        '''XEP-0172: User Nickname'''
        
-       type = 'activity'
+       type = 'nickname'
        namespace = common.xmpp.NS_NICK
                        
        def _extract_info(self, items): 
@@ -423,29 +393,21 @@
                
                retracted = items.getTag('retract') or not nick
                return (nick, retracted)                
-                       
-       def do(self, jid, name):
-               if jid == common.gajim.get_jid_from_account(name):
-                       if self._retracted:
-                               common.gajim.nicks[name] = 
common.gajim.config.get_per('accounts',
-                                       name, 'name')
-                       else:
-                               common.gajim.nicks[name] = 
self._pep_specific_data
-       
+                                               
+       def _update_contacts(self, jid, account):
+               # TODO: use dict instead
                nick = '' if self._retracted else self._pep_specific_data
-               
-               user = common.gajim.get_room_and_nick_from_fjid(jid)[0]
-               for contact in common.gajim.contacts.get_contacts(name, user):
+               for contact in common.gajim.contacts.get_contacts(account, jid):
                        contact.contact_name = nick
-                       common.gajim.interface.roster.draw_contact(user, name)
-       
-                       ctrl = 
common.gajim.interface.msg_win_mgr.get_control(user, name)
-                       if ctrl:
-                               ctrl.update_ui()
-                               win = ctrl.parent_win
-                               win.redraw_tab(ctrl)
-                               win.show_title()
-               
+                               
+       def _update_account(self, account):
+               # TODO: use dict instead
+               if self._retracted:
+                       common.gajim.nicks[account] = 
common.gajim.config.get_per('accounts',
+                                       account, 'name')
+               else:
+                       common.gajim.nicks[account] = self._pep_specific_data
+
                
 SUPPORTED_PERSONAL_USER_EVENTS = [UserMoodPEP, UserTunePEP, UserActivityPEP, 
UserNicknamePEP]
 
diff -r 215709b1a929 -r 753a410ac0a7 src/gui_interface.py
--- a/src/gui_interface.py      Sun Nov 15 10:55:31 2009 +0100
+++ b/src/gui_interface.py      Sun Nov 15 11:11:51 2009 +0100
@@ -1989,6 +1989,35 @@
                                _('PEP node %(node)s was not removed: 
%(message)s') % {
                                'node': data[1], 'message': data[2]})
                        
+       def handle_event_pep_received(self, account, data):
+               # ('PEP_RECEIVED', account, (jid, pep_type))
+               jid = data[0]
+               pep_type = data[1]
+               ctrl = common.gajim.interface.msg_win_mgr.get_control(jid, 
account)
+
+               if jid == common.gajim.get_jid_from_account(account):
+                       self.roster.draw_account(account)
+               
+               if pep_type == 'mood':
+                       self.roster.draw_mood(jid, account)
+                       if ctrl:
+                               ctrl.update_mood()
+               elif pep_type == 'tune':
+                       self.roster.draw_tune(jid, account)
+                       if ctrl:
+                               ctrl.update_tune()
+               elif pep_type == 'activity':
+                       self.roster.draw_activity(jid, account)
+                       if ctrl:
+                               ctrl.update_activity()
+               elif pep_type == 'nickname':
+                       self.roster.draw_contact(jid, account)
+                       if ctrl:
+                               ctrl.update_ui()
+                               win = ctrl.parent_win
+                               win.redraw_tab(ctrl)
+                               win.show_title()
+                       
        def register_handler(self, event, handler):                             
                                                                                
                                                                                
                                                                                
                                                        
                if event not in self.handlers:
                        self.handlers[event] = []
@@ -2088,6 +2117,7 @@
                        'JINGLE_CONNECTED': 
[self.handle_event_jingle_connected],
                        'JINGLE_DISCONNECTED': 
[self.handle_event_jingle_disconnected],
                        'JINGLE_ERROR': [self.handle_event_jingle_error],
+                       'PEP_RECEIVED': [self.handle_event_pep_received]
                }
        
        def dispatch(self, event, account, data):                               
                                                                                
                                                                                
                                                                                
                                                          
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to