implement XEP-0306 : status conditions for MUC
This commit is contained in:
		
							parent
							
								
									19306fbf6f
								
							
						
					
					
						commit
						493187d448
					
				
					 2 changed files with 51 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -42,6 +42,28 @@ import gtkgui_helpers
 | 
			
		|||
import logging
 | 
			
		||||
log = logging.getLogger('gajim.c.connection_handlers_events')
 | 
			
		||||
 | 
			
		||||
CONDITION_TO_CODE = {
 | 
			
		||||
    'realjid-public': 100,
 | 
			
		||||
    'affiliation-changed': 101,
 | 
			
		||||
    'unavailable-shown': 102,
 | 
			
		||||
    'unavailable-not-shown': 103,
 | 
			
		||||
    'configuration-changed': 104,
 | 
			
		||||
    'self-presence': 110,
 | 
			
		||||
    'logging-enabled': 170,
 | 
			
		||||
    'logging-disabled': 171,
 | 
			
		||||
    'non-anonymous': 172,
 | 
			
		||||
    'semi-anonymous': 173,
 | 
			
		||||
    'fully-anonymous': 174,
 | 
			
		||||
    'room-created': 201,
 | 
			
		||||
    'nick-assigned': 210,
 | 
			
		||||
    'banned': 301,
 | 
			
		||||
    'new-nick': 303,
 | 
			
		||||
    'kicked': 307,
 | 
			
		||||
    'removed-affiliation': 321,
 | 
			
		||||
    'removed-membership': 322,
 | 
			
		||||
    'removed-shutdown': 332,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class HelperEvent:
 | 
			
		||||
    def get_jid_resource(self, check_fake_jid=False):
 | 
			
		||||
        if check_fake_jid and hasattr(self, 'id_') and \
 | 
			
		||||
| 
						 | 
				
			
			@ -898,7 +920,15 @@ class GcPresenceReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
 | 
			
		|||
            self.status_code = ['destroyed']
 | 
			
		||||
        else:
 | 
			
		||||
            self.reason = self.stanza.getReason()
 | 
			
		||||
            self.status_code = self.stanza.getStatusCode()
 | 
			
		||||
            conditions = self.stanza.getStatusConditions()
 | 
			
		||||
            if conditions:
 | 
			
		||||
                self.status_code = []
 | 
			
		||||
                for condition in conditions:
 | 
			
		||||
                    if condition in CONDITION_TO_CODE:
 | 
			
		||||
                        self.status_code.append(CONDITION_TO_CODE[condition])
 | 
			
		||||
            else:
 | 
			
		||||
                self.status_code = self.stanza.getStatusCode()
 | 
			
		||||
 | 
			
		||||
        self.role = self.stanza.getRole()
 | 
			
		||||
        self.affiliation = self.stanza.getAffiliation()
 | 
			
		||||
        self.real_jid = self.stanza.getJid()
 | 
			
		||||
| 
						 | 
				
			
			@ -1198,7 +1228,14 @@ class GcMessageReceivedEvent(nec.NetworkIncomingEvent):
 | 
			
		|||
                conn=self.conn, msg_event=self))
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        self.status_code = self.stanza.getStatusCode()
 | 
			
		||||
        conditions = self.stanza.getStatusConditions()
 | 
			
		||||
        if conditions:
 | 
			
		||||
            self.status_code = []
 | 
			
		||||
            for condition in conditions:
 | 
			
		||||
                if condition in CONDITION_TO_CODE:
 | 
			
		||||
                    self.status_code.append(CONDITION_TO_CODE[condition])
 | 
			
		||||
        else:
 | 
			
		||||
            self.status_code = self.stanza.getStatusCode()
 | 
			
		||||
 | 
			
		||||
        if not self.stanza.getTag('body'): # no <body>
 | 
			
		||||
            # It could be a config change. See
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,6 +53,7 @@ NS_CAPTCHA        = 'urn:xmpp:captcha'                                # XEP-0158
 | 
			
		|||
NS_CHATSTATES     = 'http://jabber.org/protocol/chatstates'           # JEP-0085
 | 
			
		||||
NS_CHATTING       = 'http://jabber.org/protocol/chatting'             # XEP-0194
 | 
			
		||||
NS_CLIENT         = 'jabber:client'
 | 
			
		||||
NS_CONDITIONS     = 'urn:xmpp:muc:conditions:0'                       # XEP-0306
 | 
			
		||||
NS_COMMANDS       = 'http://jabber.org/protocol/commands'
 | 
			
		||||
NS_COMPONENT_ACCEPT = 'jabber:component:accept'
 | 
			
		||||
NS_COMPONENT_1    = 'http://jabberd.jabberstudio.org/ns/component/1.0'
 | 
			
		||||
| 
						 | 
				
			
			@ -625,6 +626,17 @@ class Protocol(Node):
 | 
			
		|||
        """
 | 
			
		||||
        return self.getTagAttr('error', 'code')
 | 
			
		||||
 | 
			
		||||
    def getStatusConditions(self):
 | 
			
		||||
        """
 | 
			
		||||
        Return the status conditions list as defined in XEP-0306.
 | 
			
		||||
        """
 | 
			
		||||
        conds = []
 | 
			
		||||
        condtag = self.getTag('conditions', namespace=NS_CONDITIONS)
 | 
			
		||||
        if condtag:
 | 
			
		||||
            for tag in condtag.getChildren():
 | 
			
		||||
                conds.append(tag.getName())
 | 
			
		||||
        return conds
 | 
			
		||||
 | 
			
		||||
    def setError(self, error, code=None):
 | 
			
		||||
        """
 | 
			
		||||
        Set the error code. Obsolete. Use error-conditions instead
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue