fill disco treeview MUCH faster. (disable the search of alerady existing row before adding: This can't happen, and disable sort function while adding items). Fir #2426
This commit is contained in:
parent
af14e353b1
commit
0b381c2391
1 changed files with 13 additions and 17 deletions
30
src/disco.py
30
src/disco.py
|
@ -905,6 +905,8 @@ class AgentBrowser:
|
||||||
def _agent_items(self, jid, node, items, force):
|
def _agent_items(self, jid, node, items, force):
|
||||||
'''Callback for when we receive a list of agent items.'''
|
'''Callback for when we receive a list of agent items.'''
|
||||||
model = self.window.services_treeview.get_model()
|
model = self.window.services_treeview.get_model()
|
||||||
|
model.clear()
|
||||||
|
self._total_items = 0
|
||||||
gobject.source_remove(self._pulse_timeout)
|
gobject.source_remove(self._pulse_timeout)
|
||||||
self.window.progressbar.hide()
|
self.window.progressbar.hide()
|
||||||
# The server returned an error
|
# The server returned an error
|
||||||
|
@ -916,17 +918,13 @@ class AgentBrowser:
|
||||||
_('This service does not contain any items to browse.'))
|
_('This service does not contain any items to browse.'))
|
||||||
return
|
return
|
||||||
# We got a list of items
|
# We got a list of items
|
||||||
|
self.window.services_treeview.set_model(None)
|
||||||
for item in items:
|
for item in items:
|
||||||
jid = item['jid']
|
jid = item['jid']
|
||||||
node = item.get('node', '')
|
node = item.get('node', '')
|
||||||
iter = self._find_item(jid, node)
|
self._total_items += 1
|
||||||
if iter:
|
self._add_item(model, jid, node, item, force)
|
||||||
# Already in the treeview
|
self.window.services_treeview.set_model(model)
|
||||||
self._update_item(model, iter, jid, node, item)
|
|
||||||
else:
|
|
||||||
# Not in the treeview
|
|
||||||
self._total_items += 1
|
|
||||||
self._add_item(model, jid, node, item, force)
|
|
||||||
|
|
||||||
def _agent_info(self, jid, node, identities, features, data):
|
def _agent_info(self, jid, node, identities, features, data):
|
||||||
'''Callback for when we receive info about an agent's item.'''
|
'''Callback for when we receive info about an agent's item.'''
|
||||||
|
@ -1327,15 +1325,13 @@ class ToplevelAgentBrowser(AgentBrowser):
|
||||||
cat, prio = _cat_to_descr['other']
|
cat, prio = _cat_to_descr['other']
|
||||||
return cat, prio
|
return cat, prio
|
||||||
|
|
||||||
def _create_category(self, cat, type=None):
|
def _create_category(self, model, cat, type=None):
|
||||||
'''Creates a category row.'''
|
'''Creates a category row.'''
|
||||||
model = self.window.services_treeview.get_model()
|
|
||||||
cat, prio = self._friendly_category(cat, type)
|
cat, prio = self._friendly_category(cat, type)
|
||||||
return model.append(None, ('', '', None, cat, prio))
|
return model.append(None, ('', '', None, cat, prio))
|
||||||
|
|
||||||
def _find_category(self, cat, type=None):
|
def _find_category(self, model, cat, type=None):
|
||||||
'''Looks up a category row and returns the iterator to it, or None.'''
|
'''Looks up a category row and returns the iterator to it, or None.'''
|
||||||
model = self.window.services_treeview.get_model()
|
|
||||||
cat, prio = self._friendly_category(cat, type)
|
cat, prio = self._friendly_category(cat, type)
|
||||||
iter = model.get_iter_root()
|
iter = model.get_iter_root()
|
||||||
while iter:
|
while iter:
|
||||||
|
@ -1384,9 +1380,9 @@ class ToplevelAgentBrowser(AgentBrowser):
|
||||||
# Set the pixmap for the row
|
# Set the pixmap for the row
|
||||||
pix = self.cache.get_icon(identities)
|
pix = self.cache.get_icon(identities)
|
||||||
# Put it in the right category
|
# Put it in the right category
|
||||||
cat = self._find_category(*cat_args)
|
cat = self._find_category(model, *cat_args)
|
||||||
if not cat:
|
if not cat:
|
||||||
cat = self._create_category(*cat_args)
|
cat = self._create_category(model, *cat_args)
|
||||||
model.append(cat, (item['jid'], item.get('node', ''), pix, descr, 1))
|
model.append(cat, (item['jid'], item.get('node', ''), pix, descr, 1))
|
||||||
self._expand_all()
|
self._expand_all()
|
||||||
# Grab info on the service
|
# Grab info on the service
|
||||||
|
@ -1436,13 +1432,13 @@ class ToplevelAgentBrowser(AgentBrowser):
|
||||||
|
|
||||||
# Check if the old category is empty
|
# Check if the old category is empty
|
||||||
if not model.iter_is_valid(old_cat_iter):
|
if not model.iter_is_valid(old_cat_iter):
|
||||||
old_cat_iter = self._find_category(old_cat)
|
old_cat_iter = self._find_category(model, old_cat)
|
||||||
if not model.iter_children(old_cat_iter):
|
if not model.iter_children(old_cat_iter):
|
||||||
model.remove(old_cat_iter)
|
model.remove(old_cat_iter)
|
||||||
|
|
||||||
cat_iter = self._find_category(cat, type)
|
cat_iter = self._find_category(model, cat, type)
|
||||||
if not cat_iter:
|
if not cat_iter:
|
||||||
cat_iter = self._create_category(cat, type)
|
cat_iter = self._create_category(model, cat, type)
|
||||||
model.append(cat_iter, (jid, node, pix, descr, 0))
|
model.append(cat_iter, (jid, node, pix, descr, 0))
|
||||||
self._expand_all()
|
self._expand_all()
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue