if server doesn't support vcard, don't allow user to modify it. Fixes #2182
This commit is contained in:
parent
394381a78a
commit
e3ba73be74
4 changed files with 54 additions and 29 deletions
|
@ -85,6 +85,7 @@ class Connection(ConnectionHandlers):
|
||||||
self.retrycount = 0
|
self.retrycount = 0
|
||||||
self.jids_for_auto_auth = [] # list of jid to auto-authorize
|
self.jids_for_auto_auth = [] # list of jid to auto-authorize
|
||||||
self.muc_jid = None
|
self.muc_jid = None
|
||||||
|
self.vcard_supported = True
|
||||||
# END __init__
|
# END __init__
|
||||||
|
|
||||||
def build_user_nick(self, user_nick):
|
def build_user_nick(self, user_nick):
|
||||||
|
|
|
@ -855,7 +855,10 @@ class ConnectionVcard:
|
||||||
|
|
||||||
id = self.connection.getAnID()
|
id = self.connection.getAnID()
|
||||||
iq.setID(id)
|
iq.setID(id)
|
||||||
self.awaiting_answers[id] = (VCARD_ARRIVED, jid)
|
j = jid
|
||||||
|
if not j:
|
||||||
|
j = gajim.get_jid_from_account(self.name)
|
||||||
|
self.awaiting_answers[id] = (VCARD_ARRIVED, j)
|
||||||
if is_fake_jid:
|
if is_fake_jid:
|
||||||
room_jid, nick = gajim.get_room_and_nick_from_fjid(jid)
|
room_jid, nick = gajim.get_room_and_nick_from_fjid(jid)
|
||||||
if not room_jid in self.room_jids:
|
if not room_jid in self.room_jids:
|
||||||
|
@ -943,9 +946,12 @@ class ConnectionVcard:
|
||||||
elif self.awaiting_answers[id][0] == VCARD_ARRIVED:
|
elif self.awaiting_answers[id][0] == VCARD_ARRIVED:
|
||||||
# If vcard is empty, we send to the interface an empty vcard so that
|
# If vcard is empty, we send to the interface an empty vcard so that
|
||||||
# it knows it arrived
|
# it knows it arrived
|
||||||
if not iq_obj.getTag('vCard'):
|
jid = self.awaiting_answers[id][1]
|
||||||
jid = self.awaiting_answers[id][1]
|
our_jid = gajim.get_jid_from_account(self.name)
|
||||||
our_jid = gajim.get_jid_from_account(self.name)
|
if iq_obj.getType() == 'error' and jid == our_jid:
|
||||||
|
# our server doesn't support vcard
|
||||||
|
self.vcard_supported = False
|
||||||
|
if not iq_obj.getTag('vCard') or iq_obj.getType() == 'error':
|
||||||
if jid and jid != our_jid:
|
if jid and jid != our_jid:
|
||||||
# Write an empty file
|
# Write an empty file
|
||||||
self.save_vcard_to_hd(jid, '')
|
self.save_vcard_to_hd(jid, '')
|
||||||
|
|
|
@ -1415,6 +1415,11 @@ class AccountModificationWindow:
|
||||||
_('Without a connection, you can not edit your personal information.'))
|
_('Without a connection, you can not edit your personal information.'))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if not gajim.connections[self.account].vcard_supported:
|
||||||
|
dialogs.ErrorDialog(_("Your server doesn't support Vcard"),
|
||||||
|
_("Your server can't save your personal information."))
|
||||||
|
return
|
||||||
|
|
||||||
gajim.interface.edit_own_details(self.account)
|
gajim.interface.edit_own_details(self.account)
|
||||||
|
|
||||||
def on_manage_proxies_button_clicked(self, widget):
|
def on_manage_proxies_button_clicked(self, widget):
|
||||||
|
|
|
@ -767,8 +767,7 @@ class RosterWindow:
|
||||||
add_sub_menu = gtk.Menu()
|
add_sub_menu = gtk.Menu()
|
||||||
disco_sub_menu = gtk.Menu()
|
disco_sub_menu = gtk.Menu()
|
||||||
new_chat_sub_menu = gtk.Menu()
|
new_chat_sub_menu = gtk.Menu()
|
||||||
profile_avatar_sub_menu = gtk.Menu()
|
|
||||||
|
|
||||||
for account in gajim.connections:
|
for account in gajim.connections:
|
||||||
if gajim.connections[account].connected <= 1:
|
if gajim.connections[account].connected <= 1:
|
||||||
# if offline or connecting
|
# if offline or connecting
|
||||||
|
@ -792,16 +791,12 @@ class RosterWindow:
|
||||||
add_item = gtk.MenuItem(_('to %s account') % account, False)
|
add_item = gtk.MenuItem(_('to %s account') % account, False)
|
||||||
add_sub_menu.append(add_item)
|
add_sub_menu.append(add_item)
|
||||||
add_item.connect('activate', self.on_add_new_contact, account)
|
add_item.connect('activate', self.on_add_new_contact, account)
|
||||||
add_new_contact_menuitem.set_submenu(add_sub_menu)
|
|
||||||
add_sub_menu.show_all()
|
|
||||||
|
|
||||||
# disco
|
# disco
|
||||||
disco_item = gtk.MenuItem(_('using %s account') % account, False)
|
disco_item = gtk.MenuItem(_('using %s account') % account, False)
|
||||||
disco_sub_menu.append(disco_item)
|
disco_sub_menu.append(disco_item)
|
||||||
disco_item.connect('activate',
|
disco_item.connect('activate',
|
||||||
self.on_service_disco_menuitem_activate, account)
|
self.on_service_disco_menuitem_activate, account)
|
||||||
service_disco_menuitem.set_submenu(disco_sub_menu)
|
|
||||||
disco_sub_menu.show_all()
|
|
||||||
|
|
||||||
# new chat
|
# new chat
|
||||||
new_chat_item = gtk.MenuItem(_('using account %s') % account,
|
new_chat_item = gtk.MenuItem(_('using account %s') % account,
|
||||||
|
@ -809,17 +804,13 @@ class RosterWindow:
|
||||||
new_chat_sub_menu.append(new_chat_item)
|
new_chat_sub_menu.append(new_chat_item)
|
||||||
new_chat_item.connect('activate',
|
new_chat_item.connect('activate',
|
||||||
self.on_new_chat_menuitem_activate, account)
|
self.on_new_chat_menuitem_activate, account)
|
||||||
new_chat_menuitem.set_submenu(new_chat_sub_menu)
|
|
||||||
new_chat_sub_menu.show_all()
|
add_new_contact_menuitem.set_submenu(add_sub_menu)
|
||||||
|
add_sub_menu.show_all()
|
||||||
# profile, avatar
|
service_disco_menuitem.set_submenu(disco_sub_menu)
|
||||||
profile_avatar_item = gtk.MenuItem(_('of account %s') % account,
|
disco_sub_menu.show_all()
|
||||||
False)
|
new_chat_menuitem.set_submenu(new_chat_sub_menu)
|
||||||
profile_avatar_sub_menu.append(profile_avatar_item)
|
new_chat_sub_menu.show_all()
|
||||||
profile_avatar_item.connect('activate',
|
|
||||||
self.on_profile_avatar_menuitem_activate, account)
|
|
||||||
profile_avatar_menuitem.set_submenu(profile_avatar_sub_menu)
|
|
||||||
profile_avatar_sub_menu.show_all()
|
|
||||||
|
|
||||||
elif connected_accounts == 1: # user has only one account
|
elif connected_accounts == 1: # user has only one account
|
||||||
for account in gajim.connections:
|
for account in gajim.connections:
|
||||||
|
@ -847,12 +838,6 @@ class RosterWindow:
|
||||||
gtk.keysyms.n, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
|
gtk.keysyms.n, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
|
||||||
self.have_new_chat_accel = True
|
self.have_new_chat_accel = True
|
||||||
|
|
||||||
# profile, avatar
|
|
||||||
if not self.profile_avatar_menuitem_handler_id:
|
|
||||||
self.profile_avatar_menuitem_handler_id = \
|
|
||||||
profile_avatar_menuitem.connect('activate', self.\
|
|
||||||
on_profile_avatar_menuitem_activate, account)
|
|
||||||
|
|
||||||
break # No other account connected
|
break # No other account connected
|
||||||
|
|
||||||
if connected_accounts == 0:
|
if connected_accounts == 0:
|
||||||
|
@ -861,17 +846,45 @@ class RosterWindow:
|
||||||
join_gc_menuitem.set_sensitive(False)
|
join_gc_menuitem.set_sensitive(False)
|
||||||
add_new_contact_menuitem.set_sensitive(False)
|
add_new_contact_menuitem.set_sensitive(False)
|
||||||
service_disco_menuitem.set_sensitive(False)
|
service_disco_menuitem.set_sensitive(False)
|
||||||
profile_avatar_menuitem.set_sensitive(False)
|
|
||||||
else: # we have one or more connected accounts
|
else: # we have one or more connected accounts
|
||||||
new_chat_menuitem.set_sensitive(True)
|
new_chat_menuitem.set_sensitive(True)
|
||||||
join_gc_menuitem.set_sensitive(True)
|
join_gc_menuitem.set_sensitive(True)
|
||||||
add_new_contact_menuitem.set_sensitive(True)
|
add_new_contact_menuitem.set_sensitive(True)
|
||||||
service_disco_menuitem.set_sensitive(True)
|
service_disco_menuitem.set_sensitive(True)
|
||||||
profile_avatar_menuitem.set_sensitive(True)
|
|
||||||
# show the 'manage gc bookmarks' item
|
# show the 'manage gc bookmarks' item
|
||||||
newitem = gtk.SeparatorMenuItem() # separator
|
newitem = gtk.SeparatorMenuItem() # separator
|
||||||
gc_sub_menu.append(newitem)
|
gc_sub_menu.append(newitem)
|
||||||
|
|
||||||
|
connected_accounts_with_vcard = []
|
||||||
|
for account in gajim.connections:
|
||||||
|
if gajim.connections[account].connected > 1 and \
|
||||||
|
gajim.connections[account].vcard_supported:
|
||||||
|
connected_accounts_with_vcard.append(account)
|
||||||
|
if len(connected_accounts_with_vcard) > 1:
|
||||||
|
# 2 or more accounts? make submenus
|
||||||
|
profile_avatar_sub_menu = gtk.Menu()
|
||||||
|
for account in connected_accounts_with_vcard:
|
||||||
|
# profile, avatar
|
||||||
|
profile_avatar_item = gtk.MenuItem(_('of account %s') % account,
|
||||||
|
False)
|
||||||
|
profile_avatar_sub_menu.append(profile_avatar_item)
|
||||||
|
profile_avatar_item.connect('activate',
|
||||||
|
self.on_profile_avatar_menuitem_activate, account)
|
||||||
|
profile_avatar_menuitem.set_submenu(profile_avatar_sub_menu)
|
||||||
|
profile_avatar_sub_menu.show_all()
|
||||||
|
elif len(connected_accounts_with_vcard) == 1: # user has only one account
|
||||||
|
account = connected_accounts_with_vcard[0]
|
||||||
|
# profile, avatar
|
||||||
|
if not self.profile_avatar_menuitem_handler_id:
|
||||||
|
self.profile_avatar_menuitem_handler_id = \
|
||||||
|
profile_avatar_menuitem.connect('activate', self.\
|
||||||
|
on_profile_avatar_menuitem_activate, account)
|
||||||
|
|
||||||
|
if len(connected_accounts_with_vcard) == 0:
|
||||||
|
profile_avatar_menuitem.set_sensitive(False)
|
||||||
|
else:
|
||||||
|
profile_avatar_menuitem.set_sensitive(True)
|
||||||
|
|
||||||
newitem = gtk.ImageMenuItem(_('Manage Bookmarks...'))
|
newitem = gtk.ImageMenuItem(_('Manage Bookmarks...'))
|
||||||
img = gtk.image_new_from_stock(gtk.STOCK_PREFERENCES,
|
img = gtk.image_new_from_stock(gtk.STOCK_PREFERENCES,
|
||||||
gtk.ICON_SIZE_MENU)
|
gtk.ICON_SIZE_MENU)
|
||||||
|
|
Loading…
Add table
Reference in a new issue