Mercurial > libervia-backend
view src/plugins/plugin_xep_0092.py @ 921:8dd168c7741c
plugin text commands: refactoring:
- commands can now return a deferred
- if commands return True, message is sent, else it is cancelled
- the escape sequence is now '//' instead of '\/'
- added software version to /whois command
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 22 Mar 2014 13:47:33 +0100 |
parents | 45dffd67a18a |
children | d609581bf74a |
line wrap: on
line source
#!/usr/bin/python # -*- coding: utf-8 -*- # SàT plugin for Software Version (XEP-0092) # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org) # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from sat.core.i18n import _ from sat.core.constants import Const as C from wokkel import disco, iwokkel, data_form, compat from sat.core import exceptions from logging import debug, info, warning, error NS_VERSION = "jabber:iq:version" PLUGIN_INFO = { "name": "Software Version Plugin", "import_name": "XEP-0092", "type": "XEP", "protocols": ["XEP-0092"], "dependencies": [], "main": "XEP_0092", "handler": "no", # version is already handler in core.xmpp module "description": _("""Implementation of Software Version""") } class XEP_0092(object): def __init__(self, host): info(_("Plugin XEP_0092 initialization")) self.host = host def getVersion(self, jid_, profile_key=C.PROF_KEY_NONE): """ Ask version of the client that jid_ is running @param jid_: jid from who we want to know client's version @param profile_key: %(doc_profile_key)s @return: a defered which fire tuple with the following data (None if not available): - name: Natural language name of the software - version: specific version of the software - os: operating system of the queried entity """ client = self.host.getClient(profile_key) if not client: raise exceptions.ProfileUnknownError iq_elt = compat.IQ(client.xmlstream, 'get') iq_elt['to'] = jid_.full() query_elt = iq_elt.addElement("query", NS_VERSION) d = iq_elt.send() d.addCallback(self._gotVersion) return d def _gotVersion(self, iq_elt): try: query_elt = iq_elt.elements(NS_VERSION, 'query').next() except StopIteration: raise exceptions.DataError ret = [] for name in ('name', 'version', 'os'): try: data_elt = query_elt.elements(NS_VERSION, name).next() ret.append(unicode(data_elt)) except StopIteration: ret.append(None) return tuple(ret)