diff --git a/src/disco.py b/src/disco.py index f30c127c6a606daeb38a86907fb920dab4815f5c..87df8ec1d7755ca7c837de00b1f205b1293ed706 100644 --- a/src/disco.py +++ b/src/disco.py @@ -34,7 +34,7 @@ # - def update_actions(self) # - def default_action(self) # - def _find_item(self, jid, node) -# - def _add_item(self, jid, node, item, force) +# - def _add_item(self, jid, node, parent_node, item, force) # - def _update_item(self, iter_, jid, node, item) # - def _update_info(self, iter_, jid, node, identities, features, data) # - def _update_error(self, iter_, jid, node) @@ -963,13 +963,13 @@ _('This service does not contain any items to browse.')) # We got a list of items self.window.services_treeview.set_model(None) for item in items: - jid = item['jid'] - node = item.get('node', '') + jid_ = item['jid'] + node_ = item.get('node', '') # If such an item is already here: don't add it - if self._find_item(jid, node): + if self._find_item(jid_, node_): continue self._total_items += 1 - self._add_item(jid, node, item, force) + self._add_item(jid_, node_, node, item, force) self.window.services_treeview.set_model(self.model) def _agent_info(self, jid, node, identities, features, data): @@ -986,7 +986,7 @@ _('This service does not contain any items to browse.')) self._update_info(iter_, jid, node, identities, features, data) self.update_actions() - def _add_item(self, jid, node, item, force): + def _add_item(self, jid, node, parent_node, item, force): '''Called when an item should be added to the model. The result of a disco#items query.''' self.model.append((jid, node, item.get('name', ''), @@ -1462,7 +1462,7 @@ class ToplevelAgentBrowser(AgentBrowser): return iter_ return None - def _add_item(self, jid, node, item, force): + def _add_item(self, jid, node, parent_node, item, force): # Row text addr = get_agent_address(jid, node) if 'name' in item: @@ -1486,10 +1486,10 @@ class ToplevelAgentBrowser(AgentBrowser): cat = self._find_category(*cat_args) if not cat: cat = self._create_category(*cat_args) - self.model.append(cat, (item['jid'], item.get('node', ''), pix, descr, 1)) + self.model.append(cat, (jid, node, pix, descr, 1)) self._expand_all() # Grab info on the service - self.cache.get_info(jid, node, self._agent_info, force = force) + self.cache.get_info(jid, node, self._agent_info, force=force) self._update_progressbar() def _update_item(self, iter_, jid, node, item): @@ -1778,7 +1778,7 @@ class MucBrowser(AgentBrowser): self._fetch_source = None self._query_visible() - def _add_item(self, jid, node, item, force): + def _add_item(self, jid, node, parent_node, item, force): self.model.append((jid, node, item.get('name', ''), -1, '', '', False)) if not self._fetch_source: self._fetch_source = gobject.idle_add(self._start_info_query) @@ -1876,10 +1876,10 @@ class DiscussionGroupsBrowser(AgentBrowser): def _add_items(self, jid, node, items, force): for item in items: - jid = item['jid'] - node = item.get('node', '') + jid_ = item['jid'] + node_ = item.get('node', '') self._total_items += 1 - self._add_item(jid, node, item, force) + self._add_item(jid_, node_, node, item, force) def _in_list_foreach(self, model, path, iter_, node): if model[path][1] == node: @@ -1890,7 +1890,7 @@ class DiscussionGroupsBrowser(AgentBrowser): self.model.foreach(self._in_list_foreach, node) return self.in_list - def _add_item(self, jid, node, item, force): + def _add_item(self, jid, node, parent_node, item, force): ''' Called when we got basic information about new node from query. Show the item. ''' name = item.get('name', '') @@ -1905,12 +1905,7 @@ class DiscussionGroupsBrowser(AgentBrowser): name = gobject.markup_escape_text(name) name = '<b>%s</b>' % name - node_splitted = node.split('/') - parent_iter = None - while len(node_splitted) > 1: - parent_node = node_splitted.pop(0) - parent_iter = self._get_child_iter(parent_iter, parent_node) - node_splitted[0] = parent_node + '/' + node_splitted[0] + parent_iter = self._get_iter(parent_node) if not self._in_list(node): self.model.append(parent_iter, (jid, node, name, dunno, subscribed)) self.cache.get_items(jid, node, self._add_items, force = force, @@ -1924,6 +1919,16 @@ class DiscussionGroupsBrowser(AgentBrowser): child_iter = self.model.iter_next(child_iter) return None + def _get_iter(self, node): + ''' Look for an iter with the given node ''' + self.found_iter = None + def is_node(model, path, iter, node): + if model[iter][1] == node: + self.found_iter = iter + return True + self.model.foreach(is_node, node) + return self.found_iter + def _add_actions(self): self.post_button = gtk.Button(label=_('New post'), use_underline=True) self.post_button.set_sensitive(False)