Mercurial > libervia-backend
diff frontends/src/primitivus/chat.py @ 907:cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
author | souliane <souliane@mailoo.org> |
---|---|
date | Mon, 17 Mar 2014 13:24:55 +0100 |
parents | f3513c8cc2e6 |
children | b12706d164d7 |
line wrap: on
line diff
--- a/frontends/src/primitivus/chat.py Sun Mar 16 21:25:49 2014 +0100 +++ b/frontends/src/primitivus/chat.py Mon Mar 17 13:24:55 2014 +0100 @@ -25,6 +25,7 @@ from sat_frontends.primitivus.card_game import CardGame from sat_frontends.quick_frontend.quick_utils import escapePrivate, unescapePrivate from sat_frontends.primitivus.xmlui import XMLUI +from sat_frontends.primitivus.constants import Const import time from sat.tools.jid import JID @@ -175,21 +176,32 @@ main_widget = self.pile self._w = main_widget - def updateChatState(self, state): - """Update the chat state of the contact. - @param state: new state to set + def updateChatState(self, state, nick=None): + """Set the chat state (XEP-0085) of the contact. Leave nick to None + to set the state for a one2one conversation, or give a nickname or + Const.ALL_OCCUPANTS to set the state of a participant within a MUC. + @param state: the new chat state + @param nick: None for one2one, the MUC user nick or Const.ALL_OCCUPANTS """ - if (self.type == 'one2one'): + if nick: + assert(self.type == 'group') + occupants = self.occupants if nick == Const.ALL_OCCUPANTS else [nick] + options = self.present_wid.getAllValues() + for index in xrange(0, len(options)): + nick = options[index].value + if nick in occupants: + options[index] = (nick, '%s %s' % (Const.MUC_USER_STATES[state], nick)) + self.present_wid.changeValues(options) + self.host.redraw() + else: + assert(self.type == 'one2one') self.__setSurrendedText(state) self.showDecoration() self.host.redraw() - elif (self.type == 'group'): - # TODO: chat state for groupchat - pass def _presentClicked(self, list_wid, clicked_wid): assert(self.type == 'group') - nick = clicked_wid.getValue() + nick = clicked_wid.getValue().value if nick == self.getUserNick(): #We ignore click on our own nick return @@ -250,9 +262,9 @@ nick = unicode(param_nick) #FIXME: should be done in DBus bridge QuickChat.replaceUser(self, nick, show_info) presents = self.present_wid.getAllValues() - if nick not in presents: + if nick not in [present.value for present in presents]: presents.append(nick) - presents.sort() + presents.sort(cmp=lambda a, b: cmp(a.value if hasattr(a, 'value') else a, b.value if hasattr(b, 'value') else b)) self.present_wid.changeValues(presents) self.host.redraw()