def _register_new_handlers(self, con): for handler in modules.get_handlers(self): if len(handler) == 5: name, func, typ, ns, priority = handler con.RegisterHandler(name, func, typ, ns, priority=priority) else: con.RegisterHandler(*handler) self.handlers_registered = True
def _unregister_new_handlers(self, con): if not con: return for handler in modules.get_handlers(self): if len(handler) > 4: handler = handler[:4] con.UnregisterHandler(*handler) self.handlers_registered = False
def cleanup(self): self._destroyed = True if Monitor.is_available(): Monitor.disconnect(self._idle_handler_id) app.app.disconnect(self._screensaver_handler_id) if self._client is not None: # cleanup() is called before nbmxpp.Client has disconnected, # when we disable the account. So we need to unregister # handlers here. # TODO: cleanup() should not be called before disconnect is finished for handler in modules.get_handlers(self): self._client.unregister_handler(handler) modules.unregister_modules(self)
def _create_client(self): if self._destroyed: # If we disable an account cleanup() is called and all # modules are unregistered. Because disable_account() does not wait # for the client to properly disconnect, handlers of the # nbxmpp.Client() are emitted after we called cleanup(). # After nbxmpp.Client() disconnects and is destroyed we create a # new instance with this method but modules.get_handlers() fails # because modules are already unregistered. # TODO: Make this nicer return log.info('Create new nbxmpp client') self._client = NBXMPPClient(log_context=self._account) self.connection = self._client self._client.set_domain(self._hostname) self._client.set_username(self._user) self._client.set_resource(get_resource(self._account)) pass_saved = app.settings.get_account_setting(self._account, 'savepass') if pass_saved: # Request password from keyring only if the user chose to save # his password self.password = passwords.get_password(self._account) self._client.set_password(self.password) self._client.set_accepted_certificates( app.cert_store.get_certificates()) self._client.subscribe('resume-failed', self._on_resume_failed) self._client.subscribe('resume-successful', self._on_resume_successful) self._client.subscribe('disconnected', self._on_disconnected) self._client.subscribe('connection-failed', self._on_connection_failed) self._client.subscribe('connected', self._on_connected) self._client.subscribe('stanza-sent', self._on_stanza_sent) self._client.subscribe('stanza-received', self._on_stanza_received) for handler in modules.get_handlers(self): self._client.register_handler(handler)
def _register_handlers(self, con, con_type): # try to find another way to register handlers in each class # that defines handlers con.RegisterHandler('iq', self._siSetCB, 'set', nbxmpp.NS_SI) con.RegisterHandler('iq', self._siErrorCB, 'error', nbxmpp.NS_SI) con.RegisterHandler('iq', self._siResultCB, 'result', nbxmpp.NS_SI) con.RegisterHandler('iq', self._bytestreamSetCB, 'set', nbxmpp.NS_BYTESTREAM) con.RegisterHandler('iq', self._bytestreamResultCB, 'result', nbxmpp.NS_BYTESTREAM) con.RegisterHandler('iq', self._bytestreamErrorCB, 'error', nbxmpp.NS_BYTESTREAM) con.RegisterHandlerOnce('iq', self.IBBAllIqHandler) con.RegisterHandler('iq', self.IBBIqHandler, ns=nbxmpp.NS_IBB) con.RegisterHandler('message', self.IBBMessageHandler, ns=nbxmpp.NS_IBB) con.RegisterHandler('iq', self._JingleCB, 'result') con.RegisterHandler('iq', self._JingleCB, 'error') con.RegisterHandler('iq', self._JingleCB, 'set', nbxmpp.NS_JINGLE) con.RegisterHandler('iq', self._ErrorCB, 'error') con.RegisterHandler('iq', self._IqCB) con.RegisterHandler('iq', self._ResultCB, 'result') con.RegisterHandler('unknown', self._StreamCB, nbxmpp.NS_XMPP_STREAMS, xmlns=nbxmpp.NS_STREAMS) con.RegisterHandler('iq', self._PubkeyGetCB, 'get', nbxmpp.NS_PUBKEY_PUBKEY) con.RegisterHandler('iq', self._PubkeyResultCB, 'result', nbxmpp.NS_PUBKEY_PUBKEY) for handler in modules.get_handlers(self): con.RegisterHandler(*handler)
def _unregister_handlers(self): if not self.connection: return for handler in modules.get_handlers(self): self.connection.UnregisterHandler(*handler)