Philipp Hörist pushed to branch master at gajim / gajim

Commits:

1 changed file:

Changes:

  • gajim/common/modules/delimiter.py
    ... ... @@ -14,53 +14,41 @@
    14 14
     
    
    15 15
     # XEP-0083: Nested Roster Groups
    
    16 16
     
    
    17
    -import nbxmpp
    
    18
    -from nbxmpp.namespaces import Namespace
    
    17
    +
    
    18
    +from nbxmpp.errors import is_error
    
    19
    +from nbxmpp.modules.util import raise_if_error
    
    19 20
     
    
    20 21
     from gajim.common.modules.base import BaseModule
    
    22
    +from gajim.common.modules.util import as_task
    
    21 23
     
    
    22 24
     
    
    23 25
     class Delimiter(BaseModule):
    
    26
    +
    
    27
    +    _nbxmpp_extends = 'Delimiter'
    
    28
    +    _nbxmpp_methods = [
    
    29
    +        'request_delimiter',
    
    30
    +        'set_delimiter'
    
    31
    +    ]
    
    32
    +
    
    24 33
         def __init__(self, con):
    
    25 34
             BaseModule.__init__(self, con)
    
    26 35
             self.available = False
    
    27 36
             self.delimiter = '::'
    
    28 37
     
    
    38
    +    @as_task
    
    29 39
         def get_roster_delimiter(self):
    
    30
    -        self._log.info('Request')
    
    31
    -        node = nbxmpp.Node('storage', attrs={'xmlns': 'roster:delimiter'})
    
    32
    -        iq = nbxmpp.Iq('get', Namespace.PRIVATE, payload=node)
    
    33
    -
    
    34
    -        self._con.connection.SendAndCallForResponse(
    
    35
    -            iq, self._delimiter_received)
    
    40
    +        _task = yield
    
    36 41
     
    
    37
    -    def _delimiter_received(self, _nbxmpp_client, stanza):
    
    38
    -        if not nbxmpp.isResultNode(stanza):
    
    39
    -            self._log.info('Request error: %s', stanza.getError())
    
    40
    -        else:
    
    41
    -            delimiter = stanza.getQuery().getTagData('roster')
    
    42
    -            self.available = True
    
    43
    -            self._log.info('Delimiter received: %s', delimiter)
    
    44
    -            if delimiter:
    
    45
    -                self.delimiter = delimiter
    
    46
    -            else:
    
    47
    -                self.set_roster_delimiter()
    
    42
    +        delimiter = yield self.request_delimiter()
    
    43
    +        if is_error(delimiter) or delimiter is None:
    
    44
    +            result = yield self.set_delimiter(self.delimiter)
    
    45
    +            raise_if_error(result)
    
    46
    +            delimiter = self.delimiter
    
    48 47
     
    
    48
    +        self.delimiter = delimiter
    
    49
    +        self.available = True
    
    49 50
             self._con.connect_machine()
    
    50 51
     
    
    51
    -    def set_roster_delimiter(self):
    
    52
    -        self._log.info('Set delimiter')
    
    53
    -        iq = nbxmpp.Iq('set', Namespace.PRIVATE)
    
    54
    -        roster = iq.getQuery().addChild('roster', namespace='roster:delimiter')
    
    55
    -        roster.setData('::')
    
    56
    -
    
    57
    -        self._con.connection.SendAndCallForResponse(
    
    58
    -            iq, self._set_delimiter_response)
    
    59
    -
    
    60
    -    def _set_delimiter_response(self, _nbxmpp_client, stanza):
    
    61
    -        if not nbxmpp.isResultNode(stanza):
    
    62
    -            self._log.info('Store error: %s', stanza.getError())
    
    63
    -
    
    64 52
     
    
    65 53
     def get_instance(*args, **kwargs):
    
    66 54
         return Delimiter(*args, **kwargs), 'Delimiter'