From 483481c586f8087d1759f44484e6eb36e5b199ec Mon Sep 17 00:00:00 2001 From: Yann Leboulanger <asterix@lagaule.org> Date: Tue, 2 Jan 2007 11:43:57 +0000 Subject: [PATCH] ask transport contact avatars only when transport is connected. fixes #2832 --- src/common/gajim.py | 4 ++++ src/config.py | 6 ++++++ src/gajim.py | 5 +++++ src/roster_window.py | 18 +++++++++++++----- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/common/gajim.py b/src/common/gajim.py index 78354108df..add7911e58 100644 --- a/src/common/gajim.py +++ b/src/common/gajim.py @@ -120,6 +120,10 @@ sleeper_state = {} # whether we pass auto away / xa or not #'autoxa': autoxa and use sleeper status_before_autoaway = {} +# jid of transport contacts for which we need to ask avatar when transport will +# be online +transport_avatar = {} # {transport_jid: [jid_list]} + SHOW_LIST = ['offline', 'connecting', 'online', 'chat', 'away', 'xa', 'dnd', 'invisible', 'error'] diff --git a/src/config.py b/src/config.py index 5faca1f17c..8482733594 100644 --- a/src/config.py +++ b/src/config.py @@ -1467,6 +1467,7 @@ class AccountModificationWindow: gajim.last_message_time[self.account] gajim.status_before_autoaway[name] = \ gajim.status_before_autoaway[self.account] + gajim.transport_avatar[name] = gajim.transport_avatar[self.account] gajim.contacts.change_account_name(self.account, name) gajim.events.change_account_name(self.account, name) @@ -1493,6 +1494,7 @@ class AccountModificationWindow: del gajim.encrypted_chats[self.account] del gajim.last_message_time[self.account] del gajim.status_before_autoaway[self.account] + del gajim.transport_avatar[self.account] gajim.connections[self.account].name = name gajim.connections[name] = gajim.connections[self.account] del gajim.connections[self.account] @@ -2054,6 +2056,7 @@ class AccountsWindow: del gajim.encrypted_chats[gajim.ZEROCONF_ACC_NAME] del gajim.last_message_time[gajim.ZEROCONF_ACC_NAME] del gajim.status_before_autoaway[gajim.ZEROCONF_ACC_NAME] + del gajim.transport_avatar[gajim.ZEROCONF_ACC_NAME] if len(gajim.connections) >= 2: # Do not merge accounts if only one exists gajim.interface.roster.regroup = gajim.config.get('mergeaccounts') @@ -2084,6 +2087,7 @@ class AccountsWindow: gajim.encrypted_chats[gajim.ZEROCONF_ACC_NAME] = [] gajim.last_message_time[gajim.ZEROCONF_ACC_NAME] = {} gajim.status_before_autoaway[gajim.ZEROCONF_ACC_NAME] = '' + gajim.transport_avatar[gajim.ZEROCONF_ACC_NAME] = {} # refresh accounts window if gajim.interface.instances.has_key('accounts'): gajim.interface.instances['accounts'].init_accounts() @@ -2587,6 +2591,7 @@ class RemoveAccountWindow: del gajim.encrypted_chats[self.account] del gajim.last_message_time[self.account] del gajim.status_before_autoaway[self.account] + del gajim.transport_avatar[self.account] if len(gajim.connections) >= 2: # Do not merge accounts if only one exists gajim.interface.roster.regroup = gajim.config.get('mergeaccounts') else: @@ -3231,6 +3236,7 @@ class AccountCreationWizardWindow: gajim.encrypted_chats[self.account] = [] gajim.last_message_time[self.account] = {} gajim.status_before_autoaway[self.account] = '' + gajim.transport_avatar[self.account] = {} # refresh accounts window if gajim.interface.instances.has_key('accounts'): gajim.interface.instances['accounts'].init_accounts() diff --git a/src/gajim.py b/src/gajim.py index de13062d71..006d19aad8 100755 --- a/src/gajim.py +++ b/src/gajim.py @@ -595,6 +595,10 @@ class Interface: # Update existing iter self.roster.draw_contact(ji, account) self.roster.draw_group(_('Transports'), account) + if new_show > 1 and ji in gajim.transport_avatar[account]: + # transport just signed in. request avatars + for jid_ in gajim.transport_avatar[account][ji]: + gajim.connections[account].request_vcard(jid_) # transport just signed in/out, don't show popup notifications # for 30s account_ji = account + '/' + ji @@ -2134,6 +2138,7 @@ class Interface: gajim.encrypted_chats[a] = [] gajim.last_message_time[a] = {} gajim.status_before_autoaway[a] = '' + gajim.transport_avatar[a] = {} self.roster = roster_window.RosterWindow() diff --git a/src/roster_window.py b/src/roster_window.py index e38f657749..68085188e9 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -1157,10 +1157,18 @@ class RosterWindow: if gajim.config.get('ask_avatars_on_startup'): pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(ji) if pixbuf == 'ask': - jid_with_resource = contact1.jid - if contact1.resource: - jid_with_resource += '/' + contact1.resource - gajim.connections[account].request_vcard(jid_with_resource) + transport = gajim.get_transport_name_from_jid(contact1.jid) + if not transport or gajim.jid_is_transport(contact1.jid): + jid_with_resource = contact1.jid + if contact1.resource: + jid_with_resource += '/' + contact1.resource + gajim.connections[account].request_vcard(jid_with_resource) + else: + host = gajim.get_server_from_jid(contact1.jid) + if not gajim.transport_avatar[account].has_key(host): + gajim.transport_avatar[account][host] = [contact1.jid] + else: + gajim.transport_avatar[account][host].append(contact1.jid) # If we already have a chat window opened, update it with new contact # instance chat_control = gajim.interface.msg_win_mgr.get_control(ji, account) @@ -4256,7 +4264,7 @@ class RosterWindow: 'closed': {}} self.transports_state_images = {'16': {}, '32': {}, 'opened': {}, 'closed': {}} - + self.last_save_dir = None self.editing_path = None # path of row with cell in edit mode self.add_new_contact_handler_id = False -- GitLab