ability to reload service discovery window by pressing ctrl + R. Fixes #5882

This commit is contained in:
Yann Leboulanger 2010-09-08 14:05:21 +02:00
parent 402881aac2
commit 2a941132b1
1 changed files with 30 additions and 12 deletions

View File

@ -354,13 +354,13 @@ class ServicesCache:
return ToplevelAgentBrowser return ToplevelAgentBrowser
return None return None
def get_info(self, jid, node, cb, force = False, nofetch = False, args = ()): def get_info(self, jid, node, cb, force=False, nofetch=False, args=()):
""" """
Get info for an agent Get info for an agent
""" """
addr = get_agent_address(jid, node) addr = get_agent_address(jid, node)
# Check the cache # Check the cache
if addr in self._info: if addr in self._info and not force:
args = self._info[addr] + args args = self._info[addr] + args
cb(jid, node, *args) cb(jid, node, *args)
return return
@ -369,8 +369,8 @@ class ServicesCache:
# Create a closure object # Create a closure object
cbkey = ('info', addr) cbkey = ('info', addr)
cb = Closure(cb, userargs = args, remove = self._clean_closure, cb = Closure(cb, userargs=args, remove=self._clean_closure,
removeargs = cbkey) removeargs=cbkey)
# Are we already fetching this? # Are we already fetching this?
if cbkey in self._cbs: if cbkey in self._cbs:
self._cbs[cbkey].append(cb) self._cbs[cbkey].append(cb)
@ -378,13 +378,13 @@ class ServicesCache:
self._cbs[cbkey] = [cb] self._cbs[cbkey] = [cb]
gajim.connections[self.account].discoverInfo(jid, node) gajim.connections[self.account].discoverInfo(jid, node)
def get_items(self, jid, node, cb, force = False, nofetch = False, args = ()): def get_items(self, jid, node, cb, force=False, nofetch=False, args=()):
""" """
Get a list of items in an agent Get a list of items in an agent
""" """
addr = get_agent_address(jid, node) addr = get_agent_address(jid, node)
# Check the cache # Check the cache
if addr in self._items: if addr in self._items and not force:
args = (self._items[addr],) + args args = (self._items[addr],) + args
cb(jid, node, *args) cb(jid, node, *args)
return return
@ -393,8 +393,8 @@ class ServicesCache:
# Create a closure object # Create a closure object
cbkey = ('items', addr) cbkey = ('items', addr)
cb = Closure(cb, userargs = args, remove = self._clean_closure, cb = Closure(cb, userargs=args, remove=self._clean_closure,
removeargs = cbkey) removeargs=cbkey)
# Are we already fetching this? # Are we already fetching this?
if cbkey in self._cbs: if cbkey in self._cbs:
self._cbs[cbkey].append(cb) self._cbs[cbkey].append(cb)
@ -505,6 +505,7 @@ class ServiceDiscoveryWindow(object):
self.children = [] self.children = []
self.dying = False self.dying = False
self.node = None self.node = None
self.reloading = False
# Check connection # Check connection
if gajim.connections[account].connected < 2: if gajim.connections[account].connected < 2:
@ -564,6 +565,12 @@ _('Without a connection, you can not browse available services'))
address_table.set_no_show_all(True) address_table.set_no_show_all(True)
address_table.hide() address_table.hide()
accel_group = gtk.AccelGroup()
keyval, mod = gtk.accelerator_parse('<Control>r')
accel_group.connect_group(keyval, mod, gtk.ACCEL_VISIBLE,
self.accel_group_func)
self.window.add_accel_group(accel_group)
self._initial_state() self._initial_state()
self.xml.connect_signals(self) self.xml.connect_signals(self)
self.travel(jid, node) self.travel(jid, node)
@ -580,6 +587,10 @@ _('Without a connection, you can not browse available services'))
if self.browser: if self.browser:
self.browser.account = value self.browser.account = value
def accel_group_func(self, accel_group, acceleratable, keyval, modifier):
if (modifier & gtk.gdk.CONTROL_MASK) and (keyval == gtk.keysyms.r):
self.reload()
def _initial_state(self): def _initial_state(self):
""" """
Set some initial state on the window. Separated in a method because it's Set some initial state on the window. Separated in a method because it's
@ -709,6 +720,12 @@ _('Without a connection, you can not browse available services'))
else: else:
self.cache.cleanup() self.cache.cleanup()
def reload(self):
if not self.jid:
return
self.reloading = True
self.travel(self.jid, self.node)
def travel(self, jid, node): def travel(self, jid, node):
""" """
Travel to an agent within the current services window Travel to an agent within the current services window
@ -726,7 +743,7 @@ _('Without a connection, you can not browse available services'))
# We need to store these, self.browser is not always available. # We need to store these, self.browser is not always available.
self.jid = jid self.jid = jid
self.node = node self.node = node
self.cache.get_info(jid, node, self._travel) self.cache.get_info(jid, node, self._travel, force=self.reloading)
def _travel(self, jid, node, identities, features, data): def _travel(self, jid, node, identities, features, data):
""" """
@ -750,7 +767,8 @@ _('This type of service does not contain any items to browse.'))
klass = AgentBrowser klass = AgentBrowser
self.browser = klass(self.account, jid, node) self.browser = klass(self.account, jid, node)
self.browser.prepare_window(self) self.browser.prepare_window(self)
self.browser.browse() self.browser.browse(force=self.reloading)
self.reloading = False
def open(self, jid, node): def open(self, jid, node):
""" """
@ -1030,7 +1048,7 @@ class AgentBrowser:
return True return True
return False return False
def browse(self, force = False): def browse(self, force=False):
""" """
Fill the treeview with agents, fetching the info if necessary Fill the treeview with agents, fetching the info if necessary
""" """
@ -1515,7 +1533,7 @@ class ToplevelAgentBrowser(AgentBrowser):
return True return True
return False return False
def browse(self, force = False): def browse(self, force=False):
self._progress = 0 self._progress = 0
AgentBrowser.browse(self, force = force) AgentBrowser.browse(self, force = force)