diff frontends/src/quick_frontend/quick_contact_list.py @ 501:e9634d2e7b38

core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1: - QuickContactManagement is not used anymore and will be removed, ContactList + Core are used instead - disconnected contacts are now displayed in Primitivus (M-d to show/hide them) - avatars are temporary unavailable in wix - new bridge method: getContactsFromGroup
author Goffi <goffi@goffi.org>
date Tue, 25 Sep 2012 00:58:34 +0200
parents 2a072735e459
children debcf5dd404a
line wrap: on
line diff
--- a/frontends/src/quick_frontend/quick_contact_list.py	Wed Sep 05 00:19:32 2012 +0200
+++ b/frontends/src/quick_frontend/quick_contact_list.py	Tue Sep 25 00:58:34 2012 +0200
@@ -19,35 +19,49 @@
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 """
 
-from logging import debug, info, error
-from sat.tools.jid  import JID
+from logging import debug
 
 
 class QuickContactList():
     """This class manage the visual representation of contacts"""
 
-    def __init__(self, CM):
-        """
-        @param CM: instance of QuickContactManagement
-        """
+    def __init__(self):
         debug(_("Contact List init"))
-        self.CM = CM
+        self._cache = {}
+
+    def update_jid(self, jid):
+        """Update the jid in the list when something changed"""
+        raise NotImplementedError
+
+    def getCache(self, jid, name):
+        try:
+            jid_cache = self._cache[jid.short]
+            if name == 'status': #XXX: we get the first status for 'status' key
+                return jid_cache['statuses'].get('default','')
+            return jid_cache[name]
+        except (KeyError, IndexError):
+            return None
+
+    def setCache(self, jid, name, value):
+        jid_cache = self._cache.setdefault(jid.short, {})
+        jid_cache[name] = value
 
     def __contains__(self, jid):
         raise NotImplementedError
     
-    def clear_contacts(self, jid):
+    def clearContacts(self, jid):
         """Clear all the contact list"""
         raise NotImplementedError
     
-    def replace(self, jid, groups=None):
+    def _replace(self, jid, groups=None, attributes=None):
+        if 'name' in attributes:
+            self.setCache(jid, 'name', attributes['name'])
+        self.replace(jid, groups, attributes)
+    
+    def replace(self, jid, groups, attributes):
         """add a contact to the list if doesn't exist, else update it"""
         raise NotImplementedError
     
-    def disconnect(self, jid):
-        """mark a contact disconnected"""
-        raise NotImplementedError
-    
     def remove(self, jid):
         """remove a contact from the list"""
         raise NotImplementedError
@@ -55,3 +69,14 @@
     def add(self, jid, param_groups=None):
         """add a contact to the list"""
         raise NotImplementedError
+
+    def updatePresence(self, jid, show, priority, statuses):
+        """Update entity's presence status
+        @param jid: entity to update's jid
+        @param show: availability
+        @parap priority: resource's priority
+        @param statuses: dict of statuses"""
+        self.setCache(jid, 'show', show)
+        self.setCache(jid, 'prority', priority)
+        self.setCache(jid, 'statuses', statuses)
+        self.update_jid(jid)