Philipp Hörist pushed to branch mainwindow at gajim / gajim
Commits: 3bbd1a93 by lovetox at 2021-03-06T15:28:18+01:00 JSONEncoder/Decoder: handle set
- - - - - 7172b2a4 by lovetox at 2021-03-06T15:28:29+01:00 Roster: add group methods
- - - - - 400fe65b by lovetox at 2021-03-06T15:32:41+01:00 Make dnd functional
- - - - -
3 changed files:
- gajim/common/modules/roster.py - gajim/common/storage/base.py - gajim/gtk/roster.py
Changes:
===================================== gajim/common/modules/roster.py ===================================== @@ -134,6 +134,19 @@ def _process_roster_push(self, _con, _stanza, properties): def get_item(self, jid): return self._roster.get(jid)
+ def set_groups(self, jid, groups): + if groups is not None: + groups = set(groups) + item = self.get_item(jid) + self._nbxmpp('Roster').set_item(jid, item.name, groups) + + def change_group(self, jid, old_group, new_group): + item = self.get_item(jid) + groups = set(item.groups) + groups.discard(old_group) + groups.add(new_group) + self._nbxmpp('Roster').set_item(jid, item.name, groups) + def iter(self): for jid, data in self._roster.items(): yield jid, data
===================================== gajim/common/storage/base.py ===================================== @@ -80,6 +80,9 @@ def _adapt_disco_info(disco_info):
class Encoder(json.JSONEncoder): def default(self, obj): + if isinstance(obj, set): + return list(obj) + if isinstance(obj, JID): return {'__type': 'JID', 'value': str(obj)}
@@ -99,6 +102,7 @@ def json_decoder(dct): return JID.from_string(dct['value']) if type_ == 'RosterItem': dct.pop('__type') + dct['groups'] = set(dct['groups']) return RosterItem(**dct) return dct
===================================== gajim/gtk/roster.py ===================================== @@ -193,12 +193,9 @@ def _on_drag_data_received(self, treeview, _drag_context, x_coord, return
source_group = model[iter_source_parent][Column.JID_OR_GROUP] - delimiter = self._client.get_module('Delimiter').delimiter - source_groups = source_group.split(delimiter) - if DEFAULT_GROUP in source_groups: - source_groups = [] + jid = model[iter_source][Column.JID_OR_GROUP] - name = model[iter_source][Column.TEXT] + # name = model[iter_source][Column.TEXT]
# Destination: the row receiving the drop iter_dest = model.get_iter(path_dest) @@ -209,25 +206,16 @@ def _on_drag_data_received(self, treeview, _drag_context, x_coord, else: dest_group = model[iter_dest_parent][Column.JID_OR_GROUP]
- dest_groups = dest_group.split(delimiter) - if DEFAULT_GROUP in dest_groups: - # Dropped into DEFAULT_GROUP, remove all groups - print('remoing all groups') - # self._client.get_module('Roster').update_contact(jid, name, []) + if source_group == dest_group: return
- print('source groups') - print(source_groups) - print('dest groups') - print(dest_groups) - if source_groups == dest_groups: - # Dropped into source group + if DEFAULT_GROUP == dest_group: + self._client.get_module('Roster').set_groups(jid, None) return - groups = list(set(dest_groups) - set(source_groups)) - print('final groups') - print(groups) - print('setting new groups') - # self._client.get_module('Roster').update_contact(jid, name, groups) + + self._client.get_module('Roster').change_group(jid, + source_group, + dest_group)
def _on_show_offline(self, action, param): action.set_state(param)
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/compare/ef13942716966b5f0f08fffef1b06fa5...