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