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/ef13942716966b5f0f08fffef1b06fa557059901...400fe65b6decf49612d6668e29a9df7c5a67adc4

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/compare/ef13942716966b5f0f08fffef1b06fa557059901...400fe65b6decf49612d6668e29a9df7c5a67adc4
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to