ability to connect to a server that doesn't support roster, and hide the correcponding features. Fixes #6745
This commit is contained in:
		
							parent
							
								
									9e79f9d437
								
							
						
					
					
						commit
						b6e26061fe
					
				
					 7 changed files with 30 additions and 10 deletions
				
			
		| 
						 | 
					@ -1669,7 +1669,8 @@ class ChatControl(ChatControlBase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Add to roster
 | 
					        # Add to roster
 | 
				
			||||||
        if not isinstance(self.contact, GC_Contact) \
 | 
					        if not isinstance(self.contact, GC_Contact) \
 | 
				
			||||||
        and _('Not in Roster') in self.contact.groups:
 | 
					        and _('Not in Roster') in self.contact.groups and \
 | 
				
			||||||
 | 
					        gajim.connections[self.account].roster_supported:
 | 
				
			||||||
            self._add_to_roster_button.show()
 | 
					            self._add_to_roster_button.show()
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            self._add_to_roster_button.hide()
 | 
					            self._add_to_roster_button.hide()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -155,6 +155,7 @@ class CommonConnection:
 | 
				
			||||||
        self.private_storage_supported = False
 | 
					        self.private_storage_supported = False
 | 
				
			||||||
        self.archiving_supported = False
 | 
					        self.archiving_supported = False
 | 
				
			||||||
        self.archive_pref_supported = False
 | 
					        self.archive_pref_supported = False
 | 
				
			||||||
 | 
					        self.roster_supported = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.muc_jid = {} # jid of muc server for each transport type
 | 
					        self.muc_jid = {} # jid of muc server for each transport type
 | 
				
			||||||
        self._stun_servers = [] # STUN servers of our jabber server
 | 
					        self._stun_servers = [] # STUN servers of our jabber server
 | 
				
			||||||
| 
						 | 
					@ -511,14 +512,14 @@ class CommonConnection:
 | 
				
			||||||
        raise NotImplementedError
 | 
					        raise NotImplementedError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def update_contact(self, jid, name, groups):
 | 
					    def update_contact(self, jid, name, groups):
 | 
				
			||||||
        if self.connection:
 | 
					        if self.connection and self.roster_supported:
 | 
				
			||||||
            self.connection.getRoster().setItem(jid=jid, name=name, groups=groups)
 | 
					            self.connection.getRoster().setItem(jid=jid, name=name, groups=groups)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def update_contacts(self, contacts):
 | 
					    def update_contacts(self, contacts):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        Update multiple roster items
 | 
					        Update multiple roster items
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        if self.connection:
 | 
					        if self.connection and self.roster_supported:
 | 
				
			||||||
            self.connection.getRoster().setItemMulti(contacts)
 | 
					            self.connection.getRoster().setItemMulti(contacts)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def new_account(self, name, config, sync=False):
 | 
					    def new_account(self, name, config, sync=False):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -550,6 +550,15 @@ class ConnectionVcard:
 | 
				
			||||||
                    roster = self.connection.getRoster(force=True)
 | 
					                    roster = self.connection.getRoster(force=True)
 | 
				
			||||||
                    roster.setRaw(roster_data)
 | 
					                    roster.setRaw(roster_data)
 | 
				
			||||||
                self._getRoster()
 | 
					                self._getRoster()
 | 
				
			||||||
 | 
					            elif iq_obj.getType() == 'error':
 | 
				
			||||||
 | 
					                self.roster_supported = False
 | 
				
			||||||
 | 
					                self.discoverItems(gajim.config.get_per('accounts', self.name,
 | 
				
			||||||
 | 
					                    'hostname'), id_prefix='Gajim_')
 | 
				
			||||||
 | 
					                if gajim.config.get_per('accounts', self.name,
 | 
				
			||||||
 | 
					                'use_ft_proxies'):
 | 
				
			||||||
 | 
					                    self.discover_ft_proxies()
 | 
				
			||||||
 | 
					                gajim.nec.push_incoming_event(RosterReceivedEvent(None,
 | 
				
			||||||
 | 
					                    conn=self))
 | 
				
			||||||
        elif self.awaiting_answers[id_][0] == PRIVACY_ARRIVED:
 | 
					        elif self.awaiting_answers[id_][0] == PRIVACY_ARRIVED:
 | 
				
			||||||
            if iq_obj.getType() != 'error':
 | 
					            if iq_obj.getType() != 'error':
 | 
				
			||||||
                self.privacy_rules_supported = True
 | 
					                self.privacy_rules_supported = True
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -915,9 +915,10 @@ class ConversationTextview(gobject.GObject):
 | 
				
			||||||
                    self.on_join_group_chat_menuitem_activate, text)
 | 
					                    self.on_join_group_chat_menuitem_activate, text)
 | 
				
			||||||
            self.handlers[id_] = childs[6]
 | 
					            self.handlers[id_] = childs[6]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if self.account:
 | 
					            if self.account and gajim.connections[self.account].\
 | 
				
			||||||
                id_ = childs[7].connect('activate', self.on_add_to_roster_activate,
 | 
					            roster_supported:
 | 
				
			||||||
                        text)
 | 
					                id_ = childs[7].connect('activate',
 | 
				
			||||||
 | 
					                    self.on_add_to_roster_activate, text)
 | 
				
			||||||
                self.handlers[id_] = childs[7]
 | 
					                self.handlers[id_] = childs[7]
 | 
				
			||||||
                childs[7].show() # show add to roster menuitem
 | 
					                childs[7].show() # show add to roster menuitem
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2398,7 +2398,8 @@ class GroupchatControl(ChatControlBase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        item = xml.get_object('add_to_roster_menuitem')
 | 
					        item = xml.get_object('add_to_roster_menuitem')
 | 
				
			||||||
        our_jid = gajim.get_jid_from_account(self.account)
 | 
					        our_jid = gajim.get_jid_from_account(self.account)
 | 
				
			||||||
        if not jid or jid == our_jid:
 | 
					        if not jid or jid == our_jid or not gajim.connections[self.account].\
 | 
				
			||||||
 | 
					        roster_supported:
 | 
				
			||||||
            item.set_sensitive(False)
 | 
					            item.set_sensitive(False)
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            id_ = item.connect('activate', self.on_add_to_roster, jid)
 | 
					            id_ = item.connect('activate', self.on_add_to_roster, jid)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -425,13 +425,17 @@ control=None, gc_contact=None):
 | 
				
			||||||
            revoke_auth_menuitem.connect('activate', roster.revoke_auth, jid,
 | 
					            revoke_auth_menuitem.connect('activate', roster.revoke_auth, jid,
 | 
				
			||||||
                    account)
 | 
					                    account)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    else:
 | 
					    elif gajim.connections[account].roster_supported:
 | 
				
			||||||
        # contact is in group 'Not in Roster'
 | 
					        # contact is in group 'Not in Roster'
 | 
				
			||||||
        add_to_roster_menuitem.set_no_show_all(False)
 | 
					        add_to_roster_menuitem.set_no_show_all(False)
 | 
				
			||||||
        subscription_menuitem.set_sensitive(False)
 | 
					        subscription_menuitem.set_sensitive(False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        add_to_roster_menuitem.connect('activate', roster.on_add_to_roster,
 | 
					        add_to_roster_menuitem.connect('activate', roster.on_add_to_roster,
 | 
				
			||||||
                contact, account)
 | 
					                contact, account)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        add_to_roster_menuitem.hide()
 | 
				
			||||||
 | 
					        add_to_roster_menuitem.set_no_show_all(True)
 | 
				
			||||||
 | 
					        subscription_menuitem.set_sensitive(False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    set_custom_avatar_menuitem.connect('activate',
 | 
					    set_custom_avatar_menuitem.connect('activate',
 | 
				
			||||||
            roster.on_set_custom_avatar_activate, contact, account)
 | 
					            roster.on_set_custom_avatar_activate, contact, account)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5396,8 +5396,11 @@ class RosterWindow:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            edit_account_menuitem.connect('activate', self.on_edit_account,
 | 
					            edit_account_menuitem.connect('activate', self.on_edit_account,
 | 
				
			||||||
                account)
 | 
					                account)
 | 
				
			||||||
            add_contact_menuitem.connect('activate', self.on_add_new_contact,
 | 
					            if gajim.connections[account].roster_supported:
 | 
				
			||||||
                account)
 | 
					                add_contact_menuitem.connect('activate',
 | 
				
			||||||
 | 
					                    self.on_add_new_contact, account)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                add_contact_menuitem.set_sensitive(False)
 | 
				
			||||||
            service_discovery_menuitem.connect('activate',
 | 
					            service_discovery_menuitem.connect('activate',
 | 
				
			||||||
                self.on_service_disco_menuitem_activate, account)
 | 
					                self.on_service_disco_menuitem_activate, account)
 | 
				
			||||||
            hostname = gajim.config.get_per('accounts', account, 'hostname')
 | 
					            hostname = gajim.config.get_per('accounts', account, 'hostname')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue