don't create a new session when we get an error message in a pm. Fixes #7435

This commit is contained in:
Yann Leboulanger 2013-08-27 17:24:41 +02:00
parent 7ae5a200d8
commit a8151d8dc2
2 changed files with 22 additions and 2 deletions

View File

@ -1367,6 +1367,17 @@ class ConnectionHandlersBase:
else:
return None
def get_latest_session(self, jid):
"""
Get the session that we last sent a message to
"""
if jid not in self.sessions:
return None
sessions = self.sessions[jid].values()
if not sessions:
return None
return sorted(sessions, key=operator.attrgetter('last_send'))[-1]
def find_controlless_session(self, jid, resource=None):
"""
Find an active session that doesn't have a control attached

View File

@ -1109,8 +1109,17 @@ class MessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
self.session = None
if self.mtype != 'groupchat':
self.session = self.conn.get_or_create_session(self.fjid,
self.thread_id)
if gajim.interface.is_pm_contact(self.fjid, account) and \
self.mtype == 'error':
self.session = self.conn.find_session(self.fjid, self.thread_id)
if not self.session:
self.session = self.conn.get_latest_session(self.fjid)
if not self.session:
self.session = self.conn.make_new_session(self.fjid,
self.thread_id, type_='pm')
else:
self.session = self.conn.get_or_create_session(self.fjid,
self.thread_id)
if self.thread_id and not self.session.received_thread_id:
self.session.received_thread_id = True