diff frontends/src/quick_frontend/quick_app.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_app.py	Wed Sep 05 00:19:32 2012 +0200
+++ b/frontends/src/quick_frontend/quick_app.py	Tue Sep 25 00:58:34 2012 +0200
@@ -19,7 +19,7 @@
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 """
 
-from logging import debug, info, error
+from logging import debug, info, warning, error
 from sat.tools.jid  import JID
 from sat_frontends.bridge.DBus import DBusBridgeFrontend,BridgeExceptionNoService
 from optparse import OptionParser
@@ -32,7 +32,6 @@
     """This class contain the main methods needed for the frontend"""
 
     def __init__(self, single_profile=True):
-        self.rosterList = {}
         self.profiles = {}
         self.single_profile = single_profile
         self.check_options()
@@ -157,7 +156,7 @@
 
             ### now we fill the contact list ###
             for contact in self.bridge.getContacts(profile):
-                self.newContact(contact[0], contact[1], contact[2], profile)
+                self.newContact(*contact, profile=profile)
 
             presences = self.bridge.getPresenceStatus(profile)
             for contact in presences:
@@ -207,8 +206,7 @@
         if not self.check_profile(profile):
             return
         debug(_("Disconnected"))
-        self.CM.clear()
-        self.contactList.clear_contacts()
+        self.contactList.clearContacts()
         self.setStatusOnline(False)
     
     def connectionError(self, error_type, profile):
@@ -227,10 +225,7 @@
             return
         entity=JID(JabberId)
         _groups = list(groups)
-        self.rosterList[entity.short]=(dict(attributes), _groups)
-        if entity in self.CM:
-            self.CM.update(entity, 'groups', _groups)
-            self.contactList.replace(entity, self.CM.getAttr(entity, 'groups'))
+        self.contact_list._replace(entity, _groups, attributes)
     
     def newMessage(self, from_jid, msg, type, to_jid, profile):
         if not self.check_profile(profile):
@@ -266,36 +261,20 @@
                 self.setStatusOnline(False)
             return
 
+        self.contact_list.updatePresence(from_jid, show, priority, statuses) 
+            
         if show != 'unavailable':
-            name=""
-            groups = []
-            if self.rosterList.has_key(from_jid.short):
-                if self.rosterList[from_jid.short][0].has_key("name"):
-                    name=self.rosterList[from_jid.short][0]["name"]
-                groups=self.rosterList[from_jid.short][1]
-
+            
             #FIXME: must be moved in a plugin
             if from_jid.short in self.profiles[profile]['watched'] and not from_jid.short in self.profiles[profile]['onlineContact']:
                 self.showAlert(_("Watched jid [%s] is connected !") % from_jid.short)
 
             self.profiles[profile]['onlineContact'].add(from_jid)  #FIXME onlineContact is useless with CM, must be removed
-            self.CM.add(from_jid)
-            self.CM.update(from_jid, 'name', unicode(name))
-            self.CM.update(from_jid, 'show', show)
-            self.CM.update(from_jid, 'statuses', statuses)
-            self.CM.update(from_jid, 'groups', groups)
-            cache = self.bridge.getCardCache(from_jid, profile)
-            if cache.has_key('nick'): 
-                self.CM.update(from_jid, 'nick', unicode(cache['nick']))
-            if cache.has_key('avatar'): 
-                self.CM.update(from_jid, 'avatar', self.bridge.getAvatarFile(cache['avatar']))
-            self.contactList.replace(from_jid, self.CM.getAttr(from_jid, 'groups'))
+           
+            #TODO: vcard data (avatar)
 
         if show=="unavailable" and from_jid in self.profiles[profile]['onlineContact']:
             self.profiles[profile]['onlineContact'].remove(from_jid)
-            self.CM.remove(from_jid)
-            if not self.CM.isConnected(from_jid):
-                self.contactList.disconnect(from_jid)
     
     def roomJoined(self, room_jid, room_nicks, user_nick, profile):
         """Called when a MUC room is joined"""
@@ -491,27 +470,27 @@
         if not self.check_profile(profile):
             return
         target = JID(jid)
-        self.contactList.remove(self.CM.get_full(target))
-        self.CM.remove(target)
+        self.contactList.remove(target)
         try:
             self.profiles[profile]['onlineContact'].remove(target.short)
         except KeyError:
             pass
 
     def updatedValue(self, name, data, profile):
+        #FIXME: to be removed
         if not self.check_profile(profile):
             return
         if name == "card_nick":
             target = JID(data['jid'])
             if target in self.contactList:
-                self.CM.update(target, 'nick', unicode(data['nick']))
-                self.contactList.replace(target)
+                #self.CM.update(target, 'nick', unicode(data['nick']))
+                self.contact_list._replace(target)
         elif name == "card_avatar":
             target = JID(data['jid'])
             if target in self.contactList:
                 filename = self.bridge.getAvatarFile(data['avatar'])
-                self.CM.update(target, 'avatar', filename)
-                self.contactList.replace(target)
+                #self.CM.update(target, 'avatar', filename)
+                self.contact_list._replace(target)
 
     def askConfirmation(self, type, id, data):
         raise NotImplementedError