Philipp Hörist pushed to branch master at gajim / gajim
Commits: 922fa4f1 by Philipp Hörist at 2019-08-05T20:49:00Z MUC: Add log message when requesting MUC history
- timestamp() makes it necessary to use timezone aware datetime objects
- - - - - dce96b5f by Philipp Hörist at 2019-08-05T21:05:30Z Logger: Improve log message
- - - - - ca1b2091 by Philipp Hörist at 2019-08-05T21:58:16Z MAM: Improve MAM efficiency
This looks at all messages incoming and saves the stanza-id if there is one. Previously this was only done for messages of type=chat, which left out muc invites and captcha messages, leading to fetching these messages later again.
- - - - -
5 changed files:
- gajim/common/logger.py - gajim/common/modules/mam.py - gajim/common/modules/message.py - gajim/common/modules/muc.py - gajim/session.py
Changes:
===================================== gajim/common/logger.py ===================================== @@ -1463,5 +1463,5 @@ class Logger: sql = '''UPDATE last_archive_message SET {} WHERE jid_id = ?'''.format(args) self._con.execute(sql, tuple(kwargs.values()) + (jid_id,)) - log.info('Save archive infos: %s', kwargs) + log.info('Set message archive info: %s %s', jid, kwargs) self._timeout_commit()
===================================== gajim/common/modules/mam.py ===================================== @@ -40,6 +40,9 @@ class MAM(BaseModule): BaseModule.__init__(self, con)
self.handlers = [ + StanzaHandler(name='message', + callback=self._set_message_archive_info, + priority=41), StanzaHandler(name='message', callback=self._mam_message_received, priority=51), @@ -101,6 +104,42 @@ class MAM(BaseModule): # A message we received return properties.mam.id, None
+ def _set_message_archive_info(self, _con, _stanza, properties): + if (properties.is_mam_message or + properties.is_pubsub or + properties.is_muc_subject): + return + + if properties.type.is_groupchat: + archive_jid = properties.jid.getBare() + namespace = muc_caps_cache.get_mam_namespace(archive_jid) + timestamp = properties.timestamp + if namespace is None: + # MUC History + app.logger.set_archive_infos( + archive_jid, + last_muc_timestamp=timestamp) + return + + else: + archive_jid = self._con.get_own_jid().getBare() + namespace = self._con.get_module('MAM').archiving_namespace + timestamp = None + + if properties.stanza_id is None or namespace != nbxmpp.NS_MAM_2: + return + + if not archive_jid == properties.stanza_id.by: + return + + if not self._con.get_module('MAM').is_catch_up_finished( + archive_jid): + return + + app.logger.set_archive_infos(archive_jid, + last_mam_id=properties.stanza_id.id, + last_muc_timestamp=timestamp) + def _mam_message_received(self, _con, stanza, properties): if not properties.is_mam_message: return
===================================== gajim/common/modules/message.py ===================================== @@ -293,16 +293,6 @@ class Message(BaseModule): stanza_id=event.stanza_id, message_id=event.message_id)
- if muc_caps_cache.has_mam(event.room_jid): - finished = self._con.get_module('MAM').is_catch_up_finished( - event.room_jid) - if not finished: - return - - app.logger.set_archive_infos(event.room_jid, - last_mam_id=event.stanza_id, - last_muc_timestamp=event.timestamp) - def _check_for_mam_compliance(self, room_jid, stanza_id): namespace = caps_cache.muc_caps_cache.get_mam_namespace(room_jid) if stanza_id is None and namespace == nbxmpp.NS_MAM_2:
===================================== gajim/common/modules/muc.py ===================================== @@ -19,6 +19,7 @@ import time import logging from datetime import datetime from datetime import timedelta +from datetime import timezone from functools import partial
import nbxmpp @@ -302,13 +303,16 @@ class MUC(BaseModule): if archive is not None and archive.last_muc_timestamp is not None: since_epoch = float(archive.last_muc_timestamp)
- since_date = datetime.utcfromtimestamp(since_epoch) + since_date = datetime.fromtimestamp(since_epoch, timezone.utc) if threshold != SyncThreshold.NO_THRESHOLD: - threshold_date = datetime.utcnow() - timedelta(days=threshold) + now = datetime.now(timezone.utc) + threshold_date = now - timedelta(days=threshold) since_date = max(threshold_date, since_date)
date_string = since_date.strftime('%Y-%m-%dT%H:%M:%SZ') muc_x.setTag('history', {'since': date_string}) + self._log.info('Request MUC history since: %s (%s)', + date_string, since_date.timestamp()) self._log.info('Threshold for %s: %s', room_jid, threshold)
def _on_error_presence(self, _con, _stanza, properties):
===================================== gajim/session.py ===================================== @@ -139,12 +139,6 @@ class ChatControlSession: stanza_id=obj.unique_id, message_id=obj.message_id)
- jid = self.conn.get_own_jid().getStripped() - if self.conn.get_module('MAM').is_catch_up_finished(jid): - app.logger.set_archive_infos(jid, - last_mam_id=obj.stanza_id, - last_muc_timestamp=obj.timestamp) - if obj.muc_pm and not obj.gc_control: # This is a carbon of a PM from a MUC we are not currently # joined. We log it silently without notification.
View it on GitLab: https://dev.gajim.org/gajim/gajim/compare/66fc682605b7812d4b4c7a3b4833f7d1f2...