1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- """
- SleekXMPP: The Sleek XMPP Library
- Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout
- This file is part of SleekXMPP.
- See the file LICENSE for copying permission.
- """
- import logging
- from sleekxmpp.stanza import Iq, Message
- from sleekxmpp.xmlstream.handler import Callback
- from sleekxmpp.xmlstream.matcher import StanzaPath
- from sleekxmpp.xmlstream import register_stanza_plugin
- from sleekxmpp.plugins import BasePlugin
- from sleekxmpp.plugins.google.nosave import stanza
- log = logging.getLogger(__name__)
- class GoogleNoSave(BasePlugin):
- """
- Google: Off the Record Chats
- NOTE: This is NOT an encryption method.
- Also see <https://developers.google.com/talk/jep_extensions/otr>.
- """
- name = 'google_nosave'
- description = 'Google: Off the Record Chats'
- dependencies = set(['google_settings'])
- stanza = stanza
- def plugin_init(self):
- register_stanza_plugin(Message, stanza.NoSave)
- register_stanza_plugin(Iq, stanza.NoSaveQuery)
- self.xmpp.register_handler(
- Callback('Google Nosave',
- StanzaPath('iq@type=set/google_nosave'),
- self._handle_nosave_change))
- def plugin_end(self):
- self.xmpp.remove_handler('Google Nosave')
- def enable(self, jid=None, block=True, timeout=None, callback=None):
- if jid is None:
- self.xmpp['google_settings'].update({'archiving_enabled': False},
- block=block, timeout=timeout, callback=callback)
- else:
- iq = self.xmpp.Iq()
- iq['type'] = 'set'
- iq['google_nosave']['item']['jid'] = jid
- iq['google_nosave']['item']['value'] = True
- return iq.send(block=block, timeout=timeout, callback=callback)
- def disable(self, jid=None, block=True, timeout=None, callback=None):
- if jid is None:
- self.xmpp['google_settings'].update({'archiving_enabled': True},
- block=block, timeout=timeout, callback=callback)
- else:
- iq = self.xmpp.Iq()
- iq['type'] = 'set'
- iq['google_nosave']['item']['jid'] = jid
- iq['google_nosave']['item']['value'] = False
- return iq.send(block=block, timeout=timeout, callback=callback)
- def get(self, block=True, timeout=None, callback=None):
- iq = self.xmpp.Iq()
- iq['type'] = 'get'
- iq.enable('google_nosave')
- return iq.send(block=block, timeout=timeout, callback=callback)
- def _handle_nosave_change(self, iq):
- reply = self.xmpp.Iq()
- reply['type'] = 'result'
- reply['id'] = iq['id']
- reply['to'] = iq['from']
- reply.send()
- self.xmpp.event('google_nosave_change', iq)
|