diff src/browser/sat_browser/blog.py @ 652:0262fee86375 frontends_multi_profiles

browser_side: MicroblogPanel.accepted_groups (set of unicode) is now built from QuickWidget.targets (set of tuple of unicode)
author souliane <souliane@mailoo.org>
date Fri, 27 Feb 2015 01:11:34 +0100
parents 2df91d0308ac
children e1d067378ad3
line wrap: on
line diff
--- a/src/browser/sat_browser/blog.py	Fri Feb 27 01:08:36 2015 +0100
+++ b/src/browser/sat_browser/blog.py	Fri Feb 27 01:11:34 2015 +0100
@@ -357,17 +357,18 @@
 
 class MicroblogPanel(quick_widgets.QuickWidget, libervia_widget.LiberviaWidget):
     warning_msg_public = "This message will be <b>PUBLIC</b> and everybody will be able to see it, even people you don't know"
-    warning_msg_group = "This message will be published for all the people of the group <span class='warningTarget'>%s</span>"
+    warning_msg_group = "This message will be published for all the people of the following groups: <span class='warningTarget'>%s</span>"
     # FIXME: all the generic parts must be moved to quick_frontends
 
-    def __init__(self, host, accepted_groups, profiles=None):
+    def __init__(self, host, targets, profiles=None):
         """Panel used to show microblog
 
-        @param accepted_groups: groups displayed in this panel, if empty, show all microblogs from all contacts
+        @param targets (tuple(unicode)): contact groups displayed in this panel.
+            If empty, show all microblogs from all contacts.
         """
-        self.setAcceptedGroup(accepted_groups)
-        quick_widgets.QuickWidget.__init__(self, host, self.target, C.PROF_KEY_NONE)
-        libervia_widget.LiberviaWidget.__init__(self, host, ", ".join(accepted_groups), selectable=True)
+        # do not mix self.targets (set of tuple of unicode) and self.accepted_groups (set of unicode)
+        quick_widgets.QuickWidget.__init__(self, host, targets, C.PROF_KEY_NONE)
+        libervia_widget.LiberviaWidget.__init__(self, host, ", ".join(self.accepted_groups), selectable=True)
         self.entries = {}
         self.comments = {}
         self.selected_entry = None
@@ -380,11 +381,7 @@
         host.addListener('avatar', self.avatarListener, [C.PROF_KEY_NONE])
 
     def __str__(self):
-        return u"Blog Widget [target: {}, profile: {}]".format(self.target, self.profile)
-
-    @property
-    def target(self):
-        return tuple(self.accepted_groups)
+        return u"Blog Widget [target: {}, profile: {}]".format(', '.join(self.accepted_groups), self.profile)
 
     def onDelete(self):
         quick_widgets.QuickWidget.onDelete(self)
@@ -454,17 +451,8 @@
 
     @property
     def accepted_groups(self):
-        return self._accepted_groups
-
-    def matchEntity(self, item):
-        """
-        @param item: single group as a string, list of groups
-        (as an array) or None (for the meta group = "all groups")
-        @return: True if self matches the given entity
-        """
-        groups = item if isinstance(item, list) else ([] if item is None else [item])
-        groups.sort()  # sort() do not return the sorted list: do it here, not on the "return" line
-        return self.accepted_groups == groups
+        """Return a set of the accepted groups"""
+        return set().union(*self.targets)
 
     def getWarningData(self, comment=None):
         """
@@ -478,13 +466,12 @@
             comment = self.selected_entry is not None
         if comment:
             return ("PUBLIC", "This is a <span class='warningTarget'>comment</span> and keep the initial post visibility, so it is potentialy public")
-        elif not self._accepted_groups:
+        elif not self.accepted_groups:
             # we have a meta MicroblogPanel, we publish publicly
             return ("PUBLIC", self.warning_msg_public)
         else:
-            # we only accept one group at the moment
             # FIXME: manage several groups
-            return ("GROUP", self.warning_msg_group % self._accepted_groups[0])
+            return ("GROUP", self.warning_msg_group % ' '.join(self.accepted_groups))
 
     def onTextEntered(self, text):
         if self.selected_entry:
@@ -493,17 +480,15 @@
             if not comments_url:
                 raise Exception("ERROR: the comments URL is empty")
             target = ("COMMENT", comments_url)
-        elif not self._accepted_groups:
+        elif not self.accepted_groups:
             # we are entering a public microblog
             target = ("PUBLIC", None)
         else:
-            # we are entering a microblog restricted to a group
-            # FIXME: manage several groups
-            target = ("GROUP", self._accepted_groups[0])
+            target = ("GROUP", self.accepted_groups)
         self.host.send([target], text)
 
     def accept_all(self):
-        return not self._accepted_groups  # we accept every microblog only if we are not filtering by groups
+        return not self.accepted_groups  # we accept every microblog only if we are not filtering by groups
 
     def getEntries(self):
         """Ask all the entries for the currenly accepted groups,
@@ -702,21 +687,13 @@
         if type_ == 'avatar':
             updateVPanel(self.vpanel)
 
-    def setAcceptedGroup(self, group):
+    def addAcceptedGroups(self, groups):
         """Add one or more group(s) which can be displayed in this panel.
 
-        Prevent from duplicate values and keep the list sorted.
-        @param group: string of the group, or list of string
+        @param groups (tuple(unicode)): tuple of groups to add
         """
-        if isinstance(group, basestring):
-            groups = [group]
-        else:
-            groups = list(group)
-        try:
-            self._accepted_groups.extend(groups)
-        except (AttributeError, TypeError): # XXX: should be AttributeError, but pyjamas bugs here
-            self._accepted_groups = groups
-        self._accepted_groups.sort()
+        # FIXME: update the widget's hash in QuickApp._widgets[MicroblogPanel]
+        self.targets.update(groups)
 
     def isJidAccepted(self, jid_):
         """Tell if a jid is actepted and must be shown in this panel
@@ -727,7 +704,7 @@
         assert isinstance(jid_, jid.JID) # FIXME temporary
         if self.accept_all():
             return True
-        for group in self._accepted_groups:
+        for group in self.accepted_groups:
             if self.host.contact_lists[self.profile].isEntityInGroup(jid_, group):
                 return True
         return False