don't mark received message as read until it's really read by user. Fixes #7094
This commit is contained in:
parent
72be2c49e0
commit
1d980fa2ef
|
@ -920,10 +920,9 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
|
||||||
self.received_history_pos = pos
|
self.received_history_pos = pos
|
||||||
|
|
||||||
def print_conversation_line(self, text, kind, name, tim,
|
def print_conversation_line(self, text, kind, name, tim,
|
||||||
other_tags_for_name=[], other_tags_for_time=[],
|
other_tags_for_name=[], other_tags_for_time=[], other_tags_for_text=[],
|
||||||
other_tags_for_text=[], count_as_new=True, subject=None,
|
count_as_new=True, subject=None, old_kind=None, xhtml=None, simple=False,
|
||||||
old_kind=None, xhtml=None, simple=False, xep0184_id=None,
|
xep0184_id=None, graphics=True, displaymarking=None, msg_id=None):
|
||||||
graphics=True, displaymarking=None):
|
|
||||||
"""
|
"""
|
||||||
Print 'chat' type messages
|
Print 'chat' type messages
|
||||||
"""
|
"""
|
||||||
|
@ -934,9 +933,9 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
|
||||||
if self.was_at_the_end or kind == 'outgoing':
|
if self.was_at_the_end or kind == 'outgoing':
|
||||||
end = True
|
end = True
|
||||||
textview.print_conversation_line(text, jid, kind, name, tim,
|
textview.print_conversation_line(text, jid, kind, name, tim,
|
||||||
other_tags_for_name, other_tags_for_time, other_tags_for_text,
|
other_tags_for_name, other_tags_for_time, other_tags_for_text,
|
||||||
subject, old_kind, xhtml, simple=simple, graphics=graphics,
|
subject, old_kind, xhtml, simple=simple, graphics=graphics,
|
||||||
displaymarking=displaymarking)
|
displaymarking=displaymarking)
|
||||||
|
|
||||||
if xep0184_id is not None:
|
if xep0184_id is not None:
|
||||||
textview.show_xep0184_warning(xep0184_id)
|
textview.show_xep0184_warning(xep0184_id)
|
||||||
|
@ -979,18 +978,18 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
|
||||||
type_ = 'printed_' + self.type_id
|
type_ = 'printed_' + self.type_id
|
||||||
event = 'message_received'
|
event = 'message_received'
|
||||||
show_in_roster = notify.get_show_in_roster(event,
|
show_in_roster = notify.get_show_in_roster(event,
|
||||||
self.account, self.contact, self.session)
|
self.account, self.contact, self.session)
|
||||||
show_in_systray = notify.get_show_in_systray(event,
|
show_in_systray = notify.get_show_in_systray(event,
|
||||||
self.account, self.contact, type_)
|
self.account, self.contact, type_)
|
||||||
|
|
||||||
event = gajim.events.create_event(type_, (self,),
|
event = gajim.events.create_event(type_, (self, msg_id),
|
||||||
show_in_roster=show_in_roster,
|
show_in_roster=show_in_roster,
|
||||||
show_in_systray=show_in_systray)
|
show_in_systray=show_in_systray)
|
||||||
gajim.events.add_event(self.account, full_jid, event)
|
gajim.events.add_event(self.account, full_jid, event)
|
||||||
# We need to redraw contact if we show in roster
|
# We need to redraw contact if we show in roster
|
||||||
if show_in_roster:
|
if show_in_roster:
|
||||||
gajim.interface.roster.draw_contact(self.contact.jid,
|
gajim.interface.roster.draw_contact(self.contact.jid,
|
||||||
self.account)
|
self.account)
|
||||||
|
|
||||||
if not self.parent_win:
|
if not self.parent_win:
|
||||||
return
|
return
|
||||||
|
@ -2398,8 +2397,8 @@ class ChatControl(ChatControlBase):
|
||||||
return gajim.nicks[self.account]
|
return gajim.nicks[self.account]
|
||||||
|
|
||||||
def print_conversation(self, text, frm='', tim=None, encrypted=False,
|
def print_conversation(self, text, frm='', tim=None, encrypted=False,
|
||||||
subject=None, xhtml=None, simple=False, xep0184_id=None,
|
subject=None, xhtml=None, simple=False, xep0184_id=None,
|
||||||
displaymarking=None):
|
displaymarking=None, msg_id=None):
|
||||||
"""
|
"""
|
||||||
Print a line in the conversation
|
Print a line in the conversation
|
||||||
|
|
||||||
|
@ -2430,21 +2429,22 @@ class ChatControl(ChatControlBase):
|
||||||
# ESessions
|
# ESessions
|
||||||
if not encrypted:
|
if not encrypted:
|
||||||
msg = _('The following message was NOT encrypted')
|
msg = _('The following message was NOT encrypted')
|
||||||
ChatControlBase.print_conversation_line(self, msg, 'status', '',
|
ChatControlBase.print_conversation_line(self, msg, 'status',
|
||||||
tim)
|
'', tim)
|
||||||
else:
|
else:
|
||||||
# GPG encryption
|
# GPG encryption
|
||||||
if encrypted and not self.gpg_is_active:
|
if encrypted and not self.gpg_is_active:
|
||||||
msg = _('The following message was encrypted')
|
msg = _('The following message was encrypted')
|
||||||
ChatControlBase.print_conversation_line(self, msg, 'status', '',
|
ChatControlBase.print_conversation_line(self, msg, 'status',
|
||||||
tim)
|
'', tim)
|
||||||
# turn on OpenPGP if this was in fact a XEP-0027 encrypted message
|
# turn on OpenPGP if this was in fact a XEP-0027 encrypted
|
||||||
|
# message
|
||||||
if encrypted == 'xep27':
|
if encrypted == 'xep27':
|
||||||
self._toggle_gpg()
|
self._toggle_gpg()
|
||||||
elif not encrypted and self.gpg_is_active:
|
elif not encrypted and self.gpg_is_active:
|
||||||
msg = _('The following message was NOT encrypted')
|
msg = _('The following message was NOT encrypted')
|
||||||
ChatControlBase.print_conversation_line(self, msg, 'status', '',
|
ChatControlBase.print_conversation_line(self, msg, 'status',
|
||||||
tim)
|
'', tim)
|
||||||
if not frm:
|
if not frm:
|
||||||
kind = 'incoming'
|
kind = 'incoming'
|
||||||
name = contact.get_shown_name()
|
name = contact.get_shown_name()
|
||||||
|
@ -2461,8 +2461,9 @@ class ChatControl(ChatControlBase):
|
||||||
if xhtml:
|
if xhtml:
|
||||||
xhtml = '<body xmlns="%s">%s</body>' % (NS_XHTML, xhtml)
|
xhtml = '<body xmlns="%s">%s</body>' % (NS_XHTML, xhtml)
|
||||||
ChatControlBase.print_conversation_line(self, text, kind, name, tim,
|
ChatControlBase.print_conversation_line(self, text, kind, name, tim,
|
||||||
subject=subject, old_kind=self.old_msg_kind, xhtml=xhtml,
|
subject=subject, old_kind=self.old_msg_kind, xhtml=xhtml,
|
||||||
simple=simple, xep0184_id=xep0184_id, displaymarking=displaymarking)
|
simple=simple, xep0184_id=xep0184_id, displaymarking=displaymarking,
|
||||||
|
msg_id=msg_id)
|
||||||
if text.startswith('/me ') or text.startswith('/me\n'):
|
if text.startswith('/me ') or text.startswith('/me\n'):
|
||||||
self.old_msg_kind = None
|
self.old_msg_kind = None
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -1889,6 +1889,18 @@ class RosterWindow:
|
||||||
Only performed if removal was requested before but the contact still had
|
Only performed if removal was requested before but the contact still had
|
||||||
pending events
|
pending events
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
msg_ids = []
|
||||||
|
for ev in event_list:
|
||||||
|
if ev.type_ != 'printed_chat':
|
||||||
|
continue
|
||||||
|
if len(ev.parameters) > 1 and ev.parameters[1]:
|
||||||
|
# There is a msg_id
|
||||||
|
msg_ids.append(ev.parameters[1])
|
||||||
|
|
||||||
|
if msg_ids:
|
||||||
|
gajim.logger.set_read_messages(msg_ids)
|
||||||
|
|
||||||
contact_list = ((event.jid.split('/')[0], event.account) for event in \
|
contact_list = ((event.jid.split('/')[0], event.account) for event in \
|
||||||
event_list)
|
event_list)
|
||||||
|
|
||||||
|
@ -2632,9 +2644,14 @@ class RosterWindow:
|
||||||
|
|
||||||
obj.session.control.print_conversation(obj.msgtxt, typ,
|
obj.session.control.print_conversation(obj.msgtxt, typ,
|
||||||
tim=obj.timestamp, encrypted=obj.encrypted, subject=obj.subject,
|
tim=obj.timestamp, encrypted=obj.encrypted, subject=obj.subject,
|
||||||
xhtml=obj.xhtml, displaymarking=obj.displaymarking)
|
xhtml=obj.xhtml, displaymarking=obj.displaymarking,
|
||||||
|
msg_id=obj.msg_id)
|
||||||
if obj.msg_id:
|
if obj.msg_id:
|
||||||
gajim.logger.set_read_messages([obj.msg_id])
|
pw = obj.session.control.parent_win
|
||||||
|
end = obj.session.control.was_at_the_end
|
||||||
|
if not pw or (pw.get_active_control() and obj.session.control \
|
||||||
|
== pw.get_active_control() and pw.is_active() and end):
|
||||||
|
gajim.logger.set_read_messages([obj.msg_id])
|
||||||
elif obj.popup:
|
elif obj.popup:
|
||||||
contact = gajim.contacts.get_contact(obj.conn.name, obj.jid)
|
contact = gajim.contacts.get_contact(obj.conn.name, obj.jid)
|
||||||
obj.session.control = gajim.interface.new_chat(contact,
|
obj.session.control = gajim.interface.new_chat(contact,
|
||||||
|
|
Loading…
Reference in New Issue