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)))