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

Commits:

3 changed files:

Changes:

  • gajim/common/modules/roster.py
    ... ... @@ -134,6 +134,19 @@ def _process_roster_push(self, _con, _stanza, properties):
    134 134
         def get_item(self, jid):
    
    135 135
             return self._roster.get(jid)
    
    136 136
     
    
    137
    +    def set_groups(self, jid, groups):
    
    138
    +        if groups is not None:
    
    139
    +            groups = set(groups)
    
    140
    +        item = self.get_item(jid)
    
    141
    +        self._nbxmpp('Roster').set_item(jid, item.name, groups)
    
    142
    +
    
    143
    +    def change_group(self, jid, old_group, new_group):
    
    144
    +        item = self.get_item(jid)
    
    145
    +        groups = set(item.groups)
    
    146
    +        groups.discard(old_group)
    
    147
    +        groups.add(new_group)
    
    148
    +        self._nbxmpp('Roster').set_item(jid, item.name, groups)
    
    149
    +
    
    137 150
         def iter(self):
    
    138 151
             for jid, data in self._roster.items():
    
    139 152
                 yield jid, data
    

  • gajim/common/storage/base.py
    ... ... @@ -80,6 +80,9 @@ def _adapt_disco_info(disco_info):
    80 80
     
    
    81 81
     class Encoder(json.JSONEncoder):
    
    82 82
         def default(self, obj):
    
    83
    +        if isinstance(obj, set):
    
    84
    +            return list(obj)
    
    85
    +
    
    83 86
             if isinstance(obj, JID):
    
    84 87
                 return {'__type': 'JID', 'value': str(obj)}
    
    85 88
     
    
    ... ... @@ -99,6 +102,7 @@ def json_decoder(dct):
    99 102
             return JID.from_string(dct['value'])
    
    100 103
         if type_ == 'RosterItem':
    
    101 104
             dct.pop('__type')
    
    105
    +        dct['groups'] = set(dct['groups'])
    
    102 106
             return RosterItem(**dct)
    
    103 107
         return dct
    
    104 108
     
    

  • gajim/gtk/roster.py
    ... ... @@ -193,12 +193,9 @@ def _on_drag_data_received(self, treeview, _drag_context, x_coord,
    193 193
                 return
    
    194 194
     
    
    195 195
             source_group = model[iter_source_parent][Column.JID_OR_GROUP]
    
    196
    -        delimiter = self._client.get_module('Delimiter').delimiter
    
    197
    -        source_groups = source_group.split(delimiter)
    
    198
    -        if DEFAULT_GROUP in source_groups:
    
    199
    -            source_groups = []
    
    196
    +
    
    200 197
             jid = model[iter_source][Column.JID_OR_GROUP]
    
    201
    -        name = model[iter_source][Column.TEXT]
    
    198
    +        # name = model[iter_source][Column.TEXT]
    
    202 199
     
    
    203 200
             # Destination: the row receiving the drop
    
    204 201
             iter_dest = model.get_iter(path_dest)
    
    ... ... @@ -209,25 +206,16 @@ def _on_drag_data_received(self, treeview, _drag_context, x_coord,
    209 206
             else:
    
    210 207
                 dest_group = model[iter_dest_parent][Column.JID_OR_GROUP]
    
    211 208
     
    
    212
    -        dest_groups = dest_group.split(delimiter)
    
    213
    -        if DEFAULT_GROUP in dest_groups:
    
    214
    -            # Dropped into DEFAULT_GROUP, remove all groups
    
    215
    -            print('remoing all groups')
    
    216
    -            # self._client.get_module('Roster').update_contact(jid, name, [])
    
    209
    +        if source_group == dest_group:
    
    217 210
                 return
    
    218 211
     
    
    219
    -        print('source groups')
    
    220
    -        print(source_groups)
    
    221
    -        print('dest groups')
    
    222
    -        print(dest_groups)
    
    223
    -        if source_groups == dest_groups:
    
    224
    -            # Dropped into source group
    
    212
    +        if DEFAULT_GROUP == dest_group:
    
    213
    +            self._client.get_module('Roster').set_groups(jid, None)
    
    225 214
                 return
    
    226
    -        groups = list(set(dest_groups) - set(source_groups))
    
    227
    -        print('final groups')
    
    228
    -        print(groups)
    
    229
    -        print('setting new groups')
    
    230
    -        # self._client.get_module('Roster').update_contact(jid, name, groups)
    
    215
    +
    
    216
    +        self._client.get_module('Roster').change_group(jid,
    
    217
    +                                                       source_group,
    
    218
    +                                                       dest_group)
    
    231 219
     
    
    232 220
         def _on_show_offline(self, action, param):
    
    233 221
             action.set_state(param)