Mercurial > libervia-backend
diff frontends/src/primitivus/chat.py @ 2020:f67da1cab6d3
quick frontend, primitivus (chat, contact_list): fixed MUC private messages handling:
- occupants can be clicked again
- QuickChat.Occupant now keep room jid and real jid if available
- history messages are filtered correctly when requesting history for MUC room or private conversation
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 24 Jul 2016 18:07:45 +0200 |
parents | 7199e6bdb94e |
children | 88c41a195728 |
line wrap: on
line diff
--- a/frontends/src/primitivus/chat.py Sun Jul 24 18:02:34 2016 +0200 +++ b/frontends/src/primitivus/chat.py Sun Jul 24 18:07:45 2016 +0200 @@ -29,9 +29,9 @@ from sat_frontends.primitivus.constants import Const as C from sat_frontends.primitivus.keys import action_key_map as a_key from sat_frontends.primitivus.widget import PrimitivusWidget +from sat_frontends.primitivus.contact_list import ContactList import time import locale -from sat_frontends.tools import jid from functools import total_ordering import bisect @@ -141,7 +141,12 @@ self.occupant_data = occupant_data occupant_data.widgets.add(self) markup = self._generateMarkup() - super(OccupantWidget, self).__init__(urwid.Text(markup)) + text = sat_widgets.ClickableText(markup) + urwid.connect_signal(text, + 'click', + self.occupant_data.parent._occupantsClicked, + user_args=[self.occupant_data]) + super(OccupantWidget, self).__init__(text) def __eq__(self, other): if other is None: @@ -259,8 +264,6 @@ if type_ == C.CHAT_GROUP: if len(self.chat_colums.contents) == 1: self.occupants_widget = OccupantsWidget(self) - # FIXME - # , option_type=sat_widgets.ClickableText, on_click=self._occupantsClicked) self.occupants_panel = sat_widgets.VerticalSeparator(self.occupants_widget) self._appendOccupantsPanel() self.host.addListener('presence', self.presenceListener, [profiles]) @@ -473,21 +476,16 @@ if occupant is not None: self.occupants_widget.removeUser(occupant) - def _occupantsClicked(self, list_wid, clicked_wid): - # FIXME: not called anymore after refactoring + def _occupantsClicked(self, occupant, clicked_wid): assert self.type == C.CHAT_GROUP - nick = clicked_wid.getValue().value - if nick == self.nick: - # We ignore clicks on our own nick - return contact_list = self.host.contact_lists[self.profile] - full_jid = jid.JID("%s/%s" % (self.target.bare, nick)) # we have a click on a nick, we need to create the widget if it doesn't exists - self.getOrCreatePrivateWidget(full_jid) + self.getOrCreatePrivateWidget(occupant.jid) # now we select the new window - contact_list.setFocus(full_jid, True) + for contact_list in self.host.widgets.getWidgets(ContactList, profiles=(self.profile,)): + contact_list.setFocus(occupant.jid, True) def _appendOccupantsPanel(self): self.chat_colums.contents.append((self.occupants_panel, ('weight', 2, False)))