ask transport contact avatars only when transport is connected. fixes #2832

This commit is contained in:
Yann Leboulanger 2007-01-02 11:43:57 +00:00
parent cafef3c1c5
commit 483481c586
4 changed files with 28 additions and 5 deletions

View File

@ -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']

View File

@ -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()

View File

@ -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()

View File

@ -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