Changeset 8709 for branches/gajim_0.11.1/src/common
- Timestamp:
- 09/04/07 20:32:31 (15 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
branches/gajim_0.11.1/src/common/connection_handlers.py
r8699 r8709 797 797 self.vcard_shas = {} # sha of contacts 798 798 self.room_jids = [] # list of gc jids so that vcard are saved in a folder 799 self.groupchat_jids = {} # {ID : groupchat_jid} 799 800 800 801 def add_sha(self, p, send_caps = True): … … 895 896 return vcard 896 897 897 def request_vcard(self, jid = None, is_fake_jid = False): 898 '''request the VCARD. If is_fake_jid is True, it means we request a vcard 899 to a fake jid, like in private messages in groupchat''' 898 def request_vcard(self, jid = None, groupchat_jid = None): 899 '''request the VCARD. If groupchat_jid is not nul, it means we request a vcard 900 to a fake jid, like in private messages in groupchat. jid can be the 901 real jid of the contact, but we want to consider it comes from a fake jid''' 900 902 if not self.connection: 901 903 return … … 910 912 if not j: 911 913 j = gajim.get_jid_from_account(self.name) 912 self.awaiting_answers[id] = (VCARD_ARRIVED, j )913 if is_fake_jid:914 room_jid, nick = gajim.get_room_and_nick_from_fjid( jid)914 self.awaiting_answers[id] = (VCARD_ARRIVED, j, groupchat_jid) 915 if groupchat_jid: 916 room_jid, nick = gajim.get_room_and_nick_from_fjid(groupchat_jid) 915 917 if not room_jid in self.room_jids: 916 918 self.room_jids.append(room_jid) 919 self.groupchat_jids[id] = groupchat_jid 917 920 self.connection.send(iq) 918 #('VCARD', {entry1: data, entry2: {entry21: data, ...}, ...})919 921 920 922 def send_vcard(self, vcard): … … 999 1001 # it knows it arrived 1000 1002 jid = self.awaiting_answers[id][1] 1003 groupchat_jid = self.awaiting_answers[id][2] 1004 frm = jid 1005 if groupchat_jid: 1006 # We do as if it comes from the fake_jid 1007 frm = groupchat_jid 1001 1008 our_jid = gajim.get_jid_from_account(self.name) 1002 1009 if iq_obj.getType() == 'error' and jid == our_jid: … … 1004 1011 self.vcard_supported = False 1005 1012 if not iq_obj.getTag('vCard') or iq_obj.getType() == 'error': 1006 if jid and jid!= our_jid:1013 if frm and frm != our_jid: 1007 1014 # Write an empty file 1008 self.save_vcard_to_hd( jid, '')1009 self.dispatch('VCARD', {'jid': jid})1010 elif jid== our_jid:1011 self.dispatch('MYVCARD', {'jid': jid})1015 self.save_vcard_to_hd(frm, '') 1016 self.dispatch('VCARD', {'jid': frm}) 1017 elif frm == our_jid: 1018 self.dispatch('MYVCARD', {'jid': frm}) 1012 1019 elif self.awaiting_answers[id][0] == AGENT_REMOVED: 1013 1020 jid = self.awaiting_answers[id][1] … … 1052 1059 if not vc.getTag('vCard').getNamespace() == common.xmpp.NS_VCARD: 1053 1060 return 1061 id = vc.getID() 1054 1062 frm_iq = vc.getFrom() 1055 1063 our_jid = gajim.get_jid_from_account(self.name) 1056 1064 resource = '' 1057 if frm_iq: 1065 if id in self.groupchat_jids: 1066 who = self.groupchat_jids[id] 1067 frm, resource = gajim.get_room_and_nick_from_fjid(who) 1068 del self.groupchat_jids[id] 1069 elif frm_iq: 1058 1070 who = helpers.get_full_jid_from_iq(vc) 1059 1071 frm, resource = gajim.get_room_and_nick_from_fjid(who) … … 1127 1139 self.connection.send(p) 1128 1140 else: 1141 #('VCARD', {entry1: data, entry2: {entry21: data, ...}, ...}) 1129 1142 self.dispatch('VCARD', vcard) 1130 1143 … … 1655 1668 if gajim.config.get('log_contact_status_changes') and self.name\ 1656 1669 not in no_log_for and jid_stripped not in no_log_for: 1657 gc_c = gajim.contacts.get_gc_contact(self.name, jid_stripped, resource) 1670 gc_c = gajim.contacts.get_gc_contact(self.name, jid_stripped, 1671 resource) 1658 1672 st = status or '' 1659 1673 if gc_c: … … 1673 1687 puny_nick = helpers.sanitize_filename(resource) 1674 1688 gajim.interface.remove_avatar_files(jid_stripped, puny_nick) 1675 if self.vcard_shas.has_key(who): # Verify sha cached in mem 1676 if avatar_sha != self.vcard_shas[who]: 1677 # avatar has been updated 1678 self.request_vcard(who, True) 1679 else: # Verify sha cached in hdd 1680 cached_vcard = self.get_cached_vcard(who, True) 1681 if cached_vcard and cached_vcard.has_key('PHOTO') and \ 1682 cached_vcard['PHOTO'].has_key('SHA'): 1683 cached_sha = cached_vcard['PHOTO']['SHA'] 1684 else: 1685 cached_sha = '' 1686 if cached_sha != avatar_sha: 1687 # avatar has been updated 1688 # sha in mem will be updated later 1689 self.request_vcard(who, True) 1690 else: 1691 # save sha in mem NOW 1692 self.vcard_shas[who] = avatar_sha 1689 # if it's a gc presence, don't ask vcard here. We may ask it to 1690 # real jid in gui part. 1693 1691 self.dispatch('GC_NOTIFY', (jid_stripped, show, status, resource, 1694 1692 prs.getRole(), prs.getAffiliation(), prs.getJid(), 1695 1693 prs.getReason(), prs.getActor(), prs.getStatusCode(), 1696 prs.getNewNick() ))1694 prs.getNewNick(), avatar_sha)) 1697 1695 return 1698 1696
