Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwurstsalat <mailtrash@posteo.de>2022-09-11 22:51:05 +0300
committerwurstsalat <mailtrash@posteo.de>2022-09-11 22:51:05 +0300
commitc94a69b6014505f31235834d64750374d9f9c369 (patch)
tree4644e751376c741bfe1e69daa88f1dc5aefc8df9
parent67c88b9b2466c98adc321c52141decd84591fb97 (diff)
cfix: Control: Correctly show MUC subject when switching
-rw-r--r--gajim/common/modules/muc.py24
-rw-r--r--gajim/common/structs.py1
-rw-r--r--gajim/gtk/control.py30
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)