summaryrefslogtreecommitdiff
path: root/src/roster.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/roster.py')
-rw-r--r--src/roster.py17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/roster.py b/src/roster.py
index d2b99cef..7866655f 100644
--- a/src/roster.py
+++ b/src/roster.py
@@ -40,6 +40,8 @@ class Roster(object):
section='var').split(':'))
self.groups = {}
self.contacts = {}
+ self.length = 0
+ self.connected = 0
# Used for caching roster infos
self.last_built = datetime.now()
@@ -104,11 +106,12 @@ class Roster(object):
return self.__node.jid
def get_and_set(self, jid):
- if not jid in self.contacts:
+ contact = self.contacts.get(jid)
+ if contact is None:
contact = Contact(self.__node[jid])
self.contacts[jid] = contact
return contact
- return self.contacts[jid]
+ return contact
def set_node(self, value):
"""Set the slixmpp RosterSingle for our roster"""
@@ -146,6 +149,7 @@ class Roster(object):
contact = self.get_and_set(key)
if key != self.jid and (contact and self.exists(contact)):
l.append(key)
+ self.length = len(l)
return l
def get_contacts(self):
@@ -190,11 +194,7 @@ class Roster(object):
"""
Get the number of connected contacts
"""
- n = 0
- for contact in self:
- if self.exists(contact) and len(contact):
- n += 1
- return n
+ return self.connected
def update_contact_groups(self, contact):
"""Regenerate the RosterGroups when receiving a contact update"""
@@ -219,7 +219,7 @@ class Roster(object):
(used to return the display size, but now we have
the display cache in RosterWin for that)
"""
- return len(self.jids())
+ return self.length
def __repr__(self):
ret = '== Roster:\nContacts:\n'
@@ -244,7 +244,6 @@ class Roster(object):
except OSError:
return
-
def exists(self, contact):
if not contact:
return False