Mercurial > libervia-web
changeset 528:ac66b8b11ab8
plugin OTR: fixes handling of the FINISHED state
author | souliane <souliane@mailoo.org> |
---|---|
date | Fri, 05 Sep 2014 10:47:17 +0200 |
parents | 4c6d7db9b45c |
children | 9bfd71e2b35c |
files | src/browser/sat_browser/plugin_sec_otr.py |
diffstat | 1 files changed, 16 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/browser/sat_browser/plugin_sec_otr.py Fri Sep 05 10:40:52 2014 +0200 +++ b/src/browser/sat_browser/plugin_sec_otr.py Fri Sep 05 10:47:17 2014 +0200 @@ -253,22 +253,22 @@ self.account = Account(host) self.contexts = {} - def startContext(self, other_jid, create=True): + def startContext(self, other_jid): assert isinstance(other_jid, jid.JID) # FIXME upstream: apparently pyjamas doesn't implement setdefault well, it ignores JID.__hash__ redefinition #context = self.contexts.setdefault(other_jid, Context(self.host, self.account, other_jid)) if other_jid not in self.contexts: - if create: - self.contexts[other_jid] = Context(self.host, self.account, other_jid) - else: - return None + self.contexts[other_jid] = Context(self.host, self.account, other_jid) return self.contexts[other_jid] def getContextForUser(self, other, create=True): log.debug(u"getContextForUser [%s]" % other) if not other.resource: log.error("getContextForUser called with a bare jid") - return self.startContext(other, create) + if start: + return self.startContext(other_jid) + else: + return self.contexts.get(other_jid, None) class OTR(object): @@ -323,11 +323,15 @@ def sendMessageTrigger(self, to_jid, msg, msg_type, extra): def cb(jid): - otrctx = self.context_manager.getContextForUser(jid) - if msg_type != 'groupchat' and otrctx.state == otr.context.STATE_ENCRYPTED: - log.debug(u"encrypting message") - otrctx.sendMessage(msg) - self.host.newMessageCb(self.host.whoami, msg, msg_type, jid, extra) + otrctx = self.context_manager.getContextForUser(jid, start=False) + if otrctx is not None and msg_type != 'groupchat' and otrctx.state != otr.context.STATE_PLAINTEXT: + if otrctx.state == otr.context.STATE_ENCRYPTED: + log.debug(u"encrypting message") + otrctx.sendMessage(msg) + self.host.newMessageCb(self.host.whoami, msg, msg_type, jid, extra) + else: + feedback = D_("Your message was not sent because your correspondent closed the encrypted conversation on his/her side. Either close your own side, or refresh the session.") + dialog.InfoDialog(_('Finished encrypted session'), feedback, AddStyleName="maxWidthLimit").show() else: log.debug(u"sending message unencrypted") self.host.bridge.call('sendMessage', (None, self.host.sendError), to_jid.full(), msg, '', msg_type, extra) @@ -397,7 +401,7 @@ return def cb(to_jid): - otrctx = self.context_manager.getContextForUser(to_jid, create=False) + otrctx = self.context_manager.getContextForUser(to_jid, start=False) if otrctx is None: not_available() return