84 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""
 | 
						|
    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)
 |