plugin XEP-0166, XEP-0234, XEP-0261:

- transport and application data are now managed in separate dictionaries
    - new client.IQ method is used
    - new buildAction helper method for applications and transports
    - "role" is now stored in session_data
    - "senders" is now stored in content_data
    - plugin XEP-0166: "transport-info" action is now managed
    - plugin XEP-0166: application namespace and handler are now managed in a namedtuple
    - plugin XEP-0234: <range/> element is added by responder if not already present
This commit is contained in:
Goffi 2015-11-02 22:02:41 +01:00
commit 170d697016

View file

@ -93,17 +93,18 @@ class XEP_0234(object):
@param profile: %(doc_profile)s
return (defer.Deferred): True if transfer is accepted
"""
file_data = content_data['file_data']
application_data = content_data['application_data']
file_data = application_data['file_data']
d = xml_tools.deferDialog(self.host,
_(CONFIRM).format(entity=session['to_jid'].full(), **file_data),
_(CONFIRM_TITLE),
type_=C.XMLUI_DIALOG_FILE,
options={C.XMLUI_DATA_FILETYPE: C.XMLUI_DATA_FILETYPE_DIR},
profile=profile)
d.addCallback(self._gotConfirmation, session, content_data, profile)
d.addCallback(self._gotConfirmation, session, content_data, application_data, profile)
return d
def _gotConfirmation(self, data, session, content_data, profile):
def _gotConfirmation(self, data, session, content_data, application_data, profile):
"""Called when the permission and dest path have been received
@param data(dict): xmlui data received from file dialog
@ -113,7 +114,7 @@ class XEP_0234(object):
"""
if data.get('cancelled', False):
return False
file_data = content_data['file_data']
file_data = application_data['file_data']
path = data['path']
file_data['file_path'] = file_path = os.path.join(path, file_data['name'])
log.debug(u'destination file path set to {}'.format(file_path))
@ -144,9 +145,10 @@ class XEP_0234(object):
def jingleSessionInit(self, session, content_name, filepath, name=None, file_desc=None, profile=C.PROF_KEY_NONE):
content_data = session['contents'][content_name]
assert 'file_path' not in content_data
content_data['file_path'] = filepath
file_data = content_data['file_data'] = {}
application_data = content_data['application_data']
assert 'file_path' not in application_data
application_data['file_path'] = filepath
file_data = application_data['file_data'] = {}
file_data['date'] = utils.xmpp_date()
file_data['desc'] = file_desc or ''
file_data['media-type'] = "application/octet-stream" # TODO
@ -190,7 +192,7 @@ class XEP_0234(object):
# TODO: parse hash using plugin XEP-0300
content_data['file_data'] = file_data
content_data['application_data']['file_data'] = file_data
# now we actualy request permission to user
return self._getDestDir(session, content_data, profile)
@ -198,12 +200,21 @@ class XEP_0234(object):
def jingleHandler(self, action, session, content_name, desc_elt, profile):
content_data = session['contents'][content_name]
if action in (self._j.A_SESSION_INITIATE, self._j.A_ACCEPTED_ACK):
application_data = content_data['application_data']
if action in (self._j.A_ACCEPTED_ACK,):
pass
elif action == self._j.A_SESSION_INITIATE:
file_elt = desc_elt.elements(NS_JINGLE_FT, 'file').next()
try:
file_elt.elements(NS_JINGLE_FT, 'range').next()
except StopIteration:
# initiator doesn't manage <range>, but we do so we advertise it
log.debug("adding <range> element")
file_elt.addElement('range')
elif action == self._j.A_SESSION_ACCEPT:
assert not 'file_obj' in content_data
file_path = content_data['file_path']
size = content_data['file_data']['size']
file_path = application_data['file_path']
size = application_data['file_data']['size']
file_obj = content_data['file_obj'] = self._f.File(self.host,
file_path,
size=size,