Philipp Hörist pushed to branch master at gajim / gajim
Commits: 6f7925e5 by lovetox at 2022-05-22T16:41:38+02:00 fix: MUC: Display moderated messages again
- Split correction and moderation into its own events
- - - - -
6 changed files:
- gajim/common/events.py - gajim/common/modules/muc.py - gajim/gtk/chat_list.py - gajim/gtk/chat_list_stack.py - gajim/gtk/controls/base.py - gajim/gtk/main.py
Changes:
===================================== gajim/common/events.py ===================================== @@ -25,6 +25,7 @@
from nbxmpp.protocol import JID from nbxmpp.structs import HTTPAuthData +from nbxmpp.structs import ModerationData from nbxmpp.structs import LocationData from nbxmpp.structs import RosterItem from nbxmpp.structs import TuneData @@ -362,6 +363,14 @@ class MessageUpdated(ApplicationEvent): correct_id: str
+@dataclass +class MessageModerated(ApplicationEvent): + name: str = field(init=False, default='message-moderated') + account: str + jid: JID + moderation: ModerationData + + @dataclass class MamMessageReceived(ApplicationEvent): name: str = field(init=False, default='mam-message-received')
===================================== gajim/common/modules/muc.py ===================================== @@ -34,7 +34,7 @@ from gajim.common import helpers from gajim.common.const import KindConstant from gajim.common.const import MUCJoinedState -from gajim.common.events import MessageUpdated +from gajim.common.events import MessageModerated from gajim.common.events import MucAdded from gajim.common.events import MucDecline from gajim.common.events import MucInvitation @@ -89,7 +89,8 @@ def __init__(self, con): typ='groupchat', priority=49), StanzaHandler(name='message', - callback=self._on_update_message, + callback=self._on_moderation, + ns=Namespace.FASTEN, typ='groupchat', priority=49), StanzaHandler(name='message', @@ -671,17 +672,19 @@ def _on_subject_change(self, _con, _stanza, properties):
raise nbxmpp.NodeProcessed
- def _on_update_message(self, _con, _stanza, properties): - if properties.is_moderation: - app.storage.archive.update_additional_data( - self._account, properties.moderation.stanza_id, properties) + def _on_moderation(self, _con, _stanza, properties): + if not properties.is_moderation: + return
- app.ged.raise_event( - MessageUpdated(account=self._account, - jid=properties.jid, - properties=properties)) + app.storage.archive.update_additional_data( + self._account, properties.moderation.stanza_id, properties)
- raise nbxmpp.NodeProcessed + app.ged.raise_event( + MessageModerated(account=self._account, + jid=properties.jid, + moderation=properties.moderation)) + + raise nbxmpp.NodeProcessed
def _fake_subject_change(self, room_jid): # This is for servers which don’t send empty subjects as part of the
===================================== gajim/gtk/chat_list.py ===================================== @@ -376,6 +376,8 @@ def process_event(self, event: events.ApplicationEvent) -> None: self._on_message_received(event) elif isinstance(event, events.MessageUpdated): self._on_message_updated(event) + elif isinstance(event, events.MessageModerated): + self._on_message_moderated(event) elif isinstance(event, events.PresenceReceived): self._on_presence_received(event) elif isinstance(event, events.MessageSent): @@ -429,17 +431,20 @@ def _on_message_updated(self, event: events.MessageUpdated) -> None: if row is None: return
- if hasattr(event, 'correct_id'): - if event.correct_id == row.message_id: - row.set_message_text(event.msgtxt) - - if event.properties.is_moderation: - if event.properties.moderation.stanza_id == row.stanza_id: - text = get_retraction_text( - event.account, - event.properties.moderation.moderator_jid, - event.properties.moderation.reason) - row.set_message_text(text) + if event.correct_id == row.message_id: + row.set_message_text(event.msgtxt) + + def _on_message_moderated(self, event: events.MessageModerated) -> None: + row = self._chats.get((event.account, event.jid)) + if row is None: + return + + if event.moderation.stanza_id == row.stanza_id: + text = get_retraction_text( + event.account, + event.moderation.moderator_jid, + event.moderation.reason) + row.set_message_text(text)
def _on_message_sent(self, event: events.MessageSent) -> None: msgtext = event.message
===================================== gajim/gtk/chat_list_stack.py ===================================== @@ -39,6 +39,7 @@ events.MamMessageReceived, events.GcMessageReceived, events.MessageUpdated, + events.MessageModerated, events.PresenceReceived, events.MessageSent, events.JingleRequestReceived,
===================================== gajim/gtk/controls/base.py ===================================== @@ -331,18 +331,15 @@ def process_event(self, event: events.ApplicationEvent) -> None: getattr(self, method_name)(event)
def _on_message_updated(self, event: events.MessageUpdated) -> None: - if hasattr(event, 'correct_id'): - self.conversation_view.correct_message( - event.correct_id, event.msgtxt) - return + self.conversation_view.correct_message(event.correct_id, event.msgtxt)
- if event.properties.is_moderation: - text = get_retraction_text( - self.account, - event.properties.moderation.moderator_jid, - event.properties.moderation.reason) - self.conversation_view.show_message_retraction( - event.properties.moderation.stanza_id, text) + def _on_message_moderated(self, event: events.MessageModerated) -> None: + text = get_retraction_text( + self.account, + event.moderation.moderator_jid, + event.moderation.reason) + self.conversation_view.show_message_retraction( + event.moderation.stanza_id, text)
def _on_conversation_view_key_press(self, _listbox: ConversationView,
===================================== gajim/gtk/main.py ===================================== @@ -110,6 +110,7 @@ def __init__(self) -> None: ('mam-message-received', ged.CORE, self._on_event), ('gc-message-received', ged.CORE, self._on_event), ('message-updated', ged.CORE, self._on_event), + ('message-moderated', ged.CORE, self._on_event), ('receipt-received', ged.GUI1, self._on_event), ('displayed-received', ged.GUI1, self._on_event), ('message-error', ged.GUI1, self._on_event),
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/6f7925e5e6c22e4cf5f4023a285bf179a...