diff options
author | wurstsalat <mailtrash@posteo.de> | 2022-09-11 22:51:05 +0300 |
---|---|---|
committer | wurstsalat <mailtrash@posteo.de> | 2022-09-11 22:51:05 +0300 |
commit | c94a69b6014505f31235834d64750374d9f9c369 (patch) | |
tree | 4644e751376c741bfe1e69daa88f1dc5aefc8df9 | |
parent | 67c88b9b2466c98adc321c52141decd84591fb97 (diff) |
cfix: Control: Correctly show MUC subject when switching
-rw-r--r-- | gajim/common/modules/muc.py | 24 | ||||
-rw-r--r-- | gajim/common/structs.py | 1 | ||||
-rw-r--r-- | gajim/gtk/control.py | 30 |
3 files changed, 30 insertions, 25 deletions
diff --git a/gajim/common/modules/muc.py b/gajim/common/modules/muc.py index c3f57fd5d..3738557a1 100644 --- a/gajim/common/modules/muc.py +++ b/gajim/common/modules/muc.py @@ -817,6 +817,7 @@ class MUC(BaseModule): _stanza: Message, properties: MessageProperties ) -> None: + if not properties.is_muc_subject: return @@ -827,13 +828,26 @@ class MUC(BaseModule): self._log.warning('No MUCData found for %s', room_jid) return - muc_subject = properties.muc_subject - if muc_subject is not None and muc_subject.timestamp is None: - muc_subject = muc_subject._replace(timestamp=time.time()) + room = self._get_contact(JID.from_string(room_jid)) + assert isinstance(room, GroupchatContact) + old_subject = muc_data.subject + + muc_subject = properties.muc_subject muc_data.subject = muc_subject - room = self._get_contact(room_jid) - room.notify('room-subject', muc_subject) + + if muc_subject is not None: + if muc_subject.timestamp is None: + muc_subject = muc_subject._replace(timestamp=time.time()) + + if old_subject is None: + muc_data.last_subject_timestamp = time.time() + room.notify('room-subject', muc_subject) + else: + # Check if we already showed that subject (rejoin) + if old_subject.text != muc_subject.text: + muc_data.last_subject_timestamp = time.time() + room.notify('room-subject', muc_subject) if muc_data.state == MUCJoinedState.JOINING: self._room_join_complete(muc_data) diff --git a/gajim/common/structs.py b/gajim/common/structs.py index a02a99334..c0d37602b 100644 --- a/gajim/common/structs.py +++ b/gajim/common/structs.py @@ -73,6 +73,7 @@ class MUCData: self.error: Optional[str] = None self.error_text: Optional[str] = None self.subject: Optional[MucSubject] = None + self.last_subject_timestamp: Optional[float] = None @property def jid(self) -> JID: diff --git a/gajim/gtk/control.py b/gajim/gtk/control.py index 8bfeb0f70..ba7d17b5e 100644 --- a/gajim/gtk/control.py +++ b/gajim/gtk/control.py @@ -92,9 +92,6 @@ class ChatControl(EventHelper): # Used with encryption plugins self.sendmessage = False - self._muc_subjects: dict[ - types.ChatContactT, tuple[float, MucSubject]] = {} - self.widget = cast(Gtk.Box, self._ui.get_object('control_box')) self.widget.show_all() @@ -195,12 +192,15 @@ class ChatControl(EventHelper): self.add_file_transfer(transfer) if isinstance(contact, GroupchatContact): - if (app.settings.get('show_subject_on_join') or - not contact.is_joining): - timestamp, subject = self._muc_subjects.get( - contact, (None, None)) - if subject is not None: - self.conversation_view.add_muc_subject(subject, timestamp) + if (not app.settings.get('show_subject_on_join') or + contact.is_joining): + return + + muc_data = self._client.get_module('MUC').get_muc_data( + str(contact.jid)) + if muc_data is not None and muc_data.subject is not None: + self.conversation_view.add_muc_subject( + muc_data.subject, muc_data.last_subject_timestamp) def _register_events(self) -> None: if self.has_events_registered(): @@ -1153,19 +1153,9 @@ class ChatControl(EventHelper): def _on_room_subject(self, contact: GroupchatContact, _signal_name: str, - subject: Optional[MucSubject] + subject: MucSubject ) -> None: - if subject is None: - return - - _timestamp, old_subject = self._muc_subjects.get(contact, (None, None)) - if old_subject is not None and old_subject.text == subject.text: - # Probably a rejoin, we already showed that subject - return - - self._muc_subjects[contact] = (time.time(), subject) - if (app.settings.get('show_subject_on_join') or not contact.is_joining): self.conversation_view.add_muc_subject(subject) |