summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2012-03-05 11:11:35 -0800
committerLance Stout <lancestout@gmail.com>2012-03-05 11:11:35 -0800
commitbe7f07ad1231b30bf953f0761773af46db952c62 (patch)
treea8e37d9e367d78a58615d757da58bef08d5ae626
parent830db11b4164410d792255eb9cf2f96779e86520 (diff)
downloadslixmpp-be7f07ad1231b30bf953f0761773af46db952c62.tar.gz
slixmpp-be7f07ad1231b30bf953f0761773af46db952c62.tar.bz2
slixmpp-be7f07ad1231b30bf953f0761773af46db952c62.tar.xz
slixmpp-be7f07ad1231b30bf953f0761773af46db952c62.zip
Prevent excess loading from the roster db.
Fixes issue #148
-rw-r--r--sleekxmpp/roster/multi.py10
-rw-r--r--sleekxmpp/roster/single.py9
2 files changed, 12 insertions, 7 deletions
diff --git a/sleekxmpp/roster/multi.py b/sleekxmpp/roster/multi.py
index 28876814..84577a9d 100644
--- a/sleekxmpp/roster/multi.py
+++ b/sleekxmpp/roster/multi.py
@@ -9,7 +9,6 @@
from sleekxmpp.xmlstream import JID
from sleekxmpp.roster import RosterNode
-
class Roster(object):
"""
@@ -104,10 +103,13 @@ class Roster(object):
db -- The new datastore interface.
"""
self.db = db
- for node in self.db.entries(None, {}):
- self.add(node)
- for node in self._rosters:
+ existing_entries = set(self._rosters)
+ new_entries = set(self.db.entries(None, {}))
+
+ for node in existing_entries:
self._rosters[node].set_backend(db)
+ for node in new_entries - existing_entries:
+ self.add(node)
def reset(self):
"""
diff --git a/sleekxmpp/roster/single.py b/sleekxmpp/roster/single.py
index 633f23f6..611f8944 100644
--- a/sleekxmpp/roster/single.py
+++ b/sleekxmpp/roster/single.py
@@ -109,10 +109,13 @@ class RosterNode(object):
db -- The new datastore interface.
"""
self.db = db
- for jid in self.db.entries(self.jid):
- self.add(jid)
- for jid in self._jids:
+ existing_entries = set(self._jids)
+ new_entries = set(self.db.entries(self.jid, {}))
+
+ for jid in existing_entries:
self._jids[jid].set_backend(db)
+ for jid in new_entries - existing_entries:
+ self.add(jid)
def add(self, jid, name='', groups=None, afrom=False, ato=False,
pending_in=False, pending_out=False, whitelisted=False,