From 25d2bcbbffd7038163916b48666830c095d20507 Mon Sep 17 00:00:00 2001 From: mathieui Date: Tue, 30 Dec 2014 19:54:04 +0100 Subject: Only graphically ack a message if it was sent by us --- src/core/handlers.py | 7 +++++-- src/tabs/basetabs.py | 4 ++-- src/text_buffer.py | 9 ++++++++- 3 files changed, 15 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/core/handlers.py b/src/core/handlers.py index 6c29e7c2..03a6d32d 100644 --- a/src/core/handlers.py +++ b/src/core/handlers.py @@ -33,7 +33,7 @@ from config import config, CACHE_DIR from contact import Resource from logger import logger from roster import roster -from text_buffer import CorrectionError +from text_buffer import CorrectionError, AckError from theming import dump_tuple, get_theme from . commands import dumb_callback @@ -1065,7 +1065,10 @@ def on_receipt(self, message): if not conversation: return - conversation.ack_message(msg_id) + try: + conversation.ack_message(msg_id, self.xmpp.boundjid) + except AckError: + log.debug('Error while receiving an ack', exc_info=True) def on_data_form(self, message): """ diff --git a/src/tabs/basetabs.py b/src/tabs/basetabs.py index c238bbd4..730d702b 100644 --- a/src/tabs/basetabs.py +++ b/src/tabs/basetabs.py @@ -737,11 +737,11 @@ class OneToOneTab(ChatTab): self.add_message(msg, typ=0) self.core.refresh_window() - def ack_message(self, msg_id): + def ack_message(self, msg_id, msg_jid): """ Ack a message """ - new_msg = self._text_buffer.ack_message(msg_id) + new_msg = self._text_buffer.ack_message(msg_id, msg_jid) if new_msg: self.text_win.modify_message(msg_id, new_msg) self.core.refresh_window() diff --git a/src/text_buffer.py b/src/text_buffer.py index 59aa96e1..db68c11f 100644 --- a/src/text_buffer.py +++ b/src/text_buffer.py @@ -24,6 +24,9 @@ Message = collections.namedtuple('Message', message_fields) class CorrectionError(Exception): pass +class AckError(Exception): + pass + def other_elems(self): "Helper for the repr_message function" acc = ['Message('] @@ -161,7 +164,7 @@ class TextBuffer(object): return i return -1 - def ack_message(self, old_id): + def ack_message(self, old_id, jid): """ Ack a message """ @@ -169,6 +172,10 @@ class TextBuffer(object): if i == -1: return msg = self.messages[i] + if msg.jid != jid: + raise AckError('Wrong JID for message id %s (was %s, expected %s)' % + (old_id, msg.jid, jid)) + new_msg = list(msg) new_msg[12] = True new_msg = Message(*new_msg) -- cgit v1.2.3