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


Commits:
8e119c4a by Nicoco at 2025-10-01T21:50:50+00:00
feat: Reactions: Add support for max_reactions_per_user

- - - - -


3 changed files:

- data/gajim.doap
- gajim/common/modules/contacts.py
- gajim/gtk/conversation/rows/message.py


Changes:

=====================================
data/gajim.doap
=====================================
@@ -723,9 +723,10 @@
     <implements>
       <xmpp:SupportedXep>
         <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0444.html"/>
-        <xmpp:status>complete</xmpp:status>
-        <xmpp:version>0.1.0</xmpp:version>
+        <xmpp:status>partial</xmpp:status>
+        <xmpp:version>0.2.1</xmpp:version>
         <xmpp:since>1.9.0</xmpp:since>
+        <xmpp:note>Partial restriction support, when max_reactions_per_user = 
1.</xmpp:note>
       </xmpp:SupportedXep>
     </implements>
     <implements>


=====================================
gajim/common/modules/contacts.py
=====================================
@@ -661,6 +661,13 @@ def is_bot(self) -> bool:
 
         return any(r.is_bot for r in self.iter_resources())
 
+    @property
+    def reactions_per_user(self) -> int | None:
+        disco = app.storage.cache.get_last_disco_info(self._jid.domain)
+        if disco is None:
+            return None
+        return disco.reactions_per_user
+
 
 class ResourceContact(CommonContact):
     def __init__(self, logger: LogAdapter, jid: JID, account: str) -> None:
@@ -952,6 +959,18 @@ def has_composing_participants(self) -> bool:
     def get_composers(self) -> list['GroupchatParticipant']:
         return self.get_module('Chatstate').get_composers(self._jid)
 
+    @property
+    def reactions_per_user(self) -> int | None:
+        for entity in (self._jid, self._jid.domain):
+            disco = app.storage.cache.get_last_disco_info(entity)
+            if disco is None:
+                continue
+
+            if disco.reactions_per_user is not None:
+                return disco.reactions_per_user
+
+        return None
+
 
 class GroupchatParticipant(CommonContact):
     def __init__(self, logger: LogAdapter, jid: JID, account: str) -> None:
@@ -1099,6 +1118,10 @@ def is_blocked(self) -> bool:
         return client.get_module('MucBlocking').is_blocked(
             self.room.jid, self.occupant_id)
 
+    @property
+    def reactions_per_user(self) -> int | None:
+        return self.room.reactions_per_user
+
 
 def can_add_to_roster(contact: BareContact) -> bool:
     if contact.is_self:


=====================================
gajim/gtk/conversation/rows/message.py
=====================================
@@ -488,6 +488,8 @@ def send_reaction(self, emoji: str, toggle: bool = True) -> 
None:
 
         if emoji in our_reactions:
             our_reactions.discard(emoji)
+        elif self._contact.reactions_per_user == 1:
+            our_reactions = {emoji}
         else:
             our_reactions.add(emoji)
 



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/8e119c4afd0a779cc90fbaf85026f09a1b35c4be

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


_______________________________________________
Commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to