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


Commits:
809674b3 by wurstsalat at 2022-06-17T17:49:39+02:00
imprv: MUC: Base invitation type on MUC type and affiliation

Conditions are listed here: 
https://dev.gajim.org/gajim/gajim/-/wikis/development/MUC-Invite-Logic

- - - - -


2 changed files:

- gajim/common/modules/muc.py
- gajim/gtk/controls/groupchat.py


Changes:

=====================================
gajim/common/modules/muc.py
=====================================
@@ -58,6 +58,7 @@
 from gajim.common.structs import MUCPresenceData
 from gajim.common.modules.bits_of_binary import store_bob_data
 from gajim.common.modules.base import BaseModule
+from gajim.common.modules.contacts import GroupchatContact
 
 log = logging.getLogger('gajim.c.m.muc')
 
@@ -431,7 +432,7 @@ def _on_config_result(self, task: Task) -> None:
         self.set_affiliation(result.jid, user_list)
 
         for jid in invites:
-            self.invite(result.jid, jid)
+            self.invite(result.jid, JID.from_string(jid))
 
     def _on_disco_result_after_config(self, task: Task) -> None:
         try:
@@ -919,17 +920,27 @@ def _on_disco_result_after_invite(self, task: Task) -> 
None:
                           **invite_data._asdict()))
 
     def invite(self,
-               room: str,
-               jid: str,
+               room: JID,
+               jid: JID,
                reason: Optional[str] = None,
                continue_: bool = False
                ) -> str:
-        type_ = InviteType.MEDIATED
-        contact = self._get_contact(jid)
-        if contact and contact.supports(Namespace.CONFERENCE):
+        if helpers.get_muc_context(room) == 'private':
+            room_contact = self._get_contact(room)
+            assert isinstance(room_contact, GroupchatContact)
+            self_contact = room_contact.get_self()
+            affiliation = self_contact.affiliation
+            admin = affiliation.is_owner or affiliation.is_admin
+            if admin:
+                self.set_affiliation(
+                    room, {jid: {'affiliation': 'member'}})
+                type_ = InviteType.DIRECT
+            else:
+                type_ = InviteType.MEDIATED
+        else:
             type_ = InviteType.DIRECT
 
-        password = self._mucs[room].password
+        password = self._mucs[str(room)].password
         self._log.info('Invite %s to %s', jid, room)
         return self._nbxmpp('MUC').invite(
             room, jid, reason, password, continue_, type_)


=====================================
gajim/gtk/controls/groupchat.py
=====================================
@@ -410,13 +410,16 @@ def _on_invite_ready(self,
     def _on_invite_clicked(self, _button: Gtk.Button) -> None:
         invitees = self._invite_box.get_invitees()
         for jid in invitees:
-            self.invite(jid)
+            self.invite(JID.from_string(jid))
         self._show_page('groupchat')
 
-    def invite(self, contact_jid: str) -> None:
-        self._client.get_module('MUC').invite(self.room_jid, contact_jid)
+    def invite(self, invited_jid: JID) -> None:
+        self._client.get_module('MUC').invite(
+            self.contact.jid, invited_jid)
+        invited_contact = self._client.get_module('Contacts').get_contact(
+            invited_jid)
         self.add_info_message(
-            _('%s has been invited to this group chat') % contact_jid)
+            _('%s has been invited to this group chat') % invited_contact.name)
 
     def _on_destroy_room(self, _button: Gtk.Button) -> None:
         self.xml.destroy_reason_entry.grab_focus()



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/809674b33152bcf5b655be6a1a489938d7279acf

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/809674b33152bcf5b655be6a1a489938d7279acf
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
Commits@gajim.org
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to