diff --git a/gajim/common/connection_handlers_events.py b/gajim/common/connection_handlers_events.py index 4f7e78b0a7e08ad9bcc370e1c4e0cc4b39988fcd..7bf37181587925480c40ff8706fe18aa0c6b25a9 100644 --- a/gajim/common/connection_handlers_events.py +++ b/gajim/common/connection_handlers_events.py @@ -1062,7 +1062,7 @@ class MamMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent): def generate(self): archive_jid = self.stanza.getFrom() - own_jid = self.conn.get_own_jid() + own_jid = self.conn.get_own_jid().getStripped() if archive_jid and not archive_jid.bareMatch(own_jid): # MAM Message not from our Archive return False @@ -1076,7 +1076,7 @@ class MamMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent): self.unique_id, origin_id = self.get_unique_id() # Check for duplicates - if app.logger.find_stanza_id(self.unique_id, origin_id): + if app.logger.find_stanza_id(own_jid, self.unique_id, origin_id): return self.msgtxt = self.msg_.getTagData('body') @@ -1150,16 +1150,18 @@ class MamGcMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent): self.kind = KindConstant.GC_MSG def generate(self): - self.room_jid = self.stanza.getFrom() self.msg_ = self.forwarded.getTag('message', protocol=True) if self.msg_.getType() != 'groupchat': return False + self.room_jid = self.stanza.getFrom().getStripped() + self.unique_id = self.get_stanza_id(self.result, query=True) # Check for duplicates - if app.logger.find_stanza_id(self.unique_id): + if app.logger.find_stanza_id(self.room_jid, self.unique_id, + groupchat=True): return self.msgtxt = self.msg_.getTagData('body') @@ -1282,7 +1284,9 @@ class MessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent): # Check groupchat messages for duplicates, # We do this because of MUC History messages if self.stanza.getType() == 'groupchat': - if app.logger.find_stanza_id(self.unique_id): + if app.logger.find_stanza_id(self.stanza.getFrom().getStripped(), + self.unique_id, + groupchat=True): return address_tag = self.stanza.getTag('addresses', diff --git a/gajim/common/logger.py b/gajim/common/logger.py index 275a31a14e5eb5579a8f2f30fad22d4a981e55c1..6fe0bdddaae539e32d18abf0f725e6ce7035a52f 100644 --- a/gajim/common/logger.py +++ b/gajim/common/logger.py @@ -1088,12 +1088,19 @@ class Logger: return True return False - def find_stanza_id(self, stanza_id, origin_id=None): + def find_stanza_id(self, archive_jid, stanza_id, origin_id=None, + groupchat=False): """ Checks if a stanza-id is already in the `logs` table + :param archive_jid: The jid of the archive the stanza-id belongs to + :param stanza_id: The stanza-id + :param origin_id: The origin-id + + :param groupchat: stanza-id is from a groupchat + return True if the stanza-id was found """ ids = [] @@ -1105,12 +1112,19 @@ class Logger: if not ids: return False + archive_id = self.get_jid_id(archive_jid) + if groupchat: + column = 'jid_id' + else: + column = 'account_id' + sql = ''' SELECT stanza_id FROM logs - WHERE stanza_id IN ({values}) LIMIT 1 - '''.format(values=', '.join('?' * len(ids))) + WHERE stanza_id IN ({values}) AND {archive} = ? LIMIT 1 + '''.format(values=', '.join('?' * len(ids)), + archive=column) - result = self.con.execute(sql, tuple(ids)).fetchone() + result = self.con.execute(sql, tuple(ids) + (archive_id,)).fetchone() if result is not None: log.info('Found duplicated message, stanza-id: %s, origin-id: %s',