Add HTTP File Upload support.
This commit is contained in:
parent
ac6adbf21b
commit
a468e16140
4 changed files with 75 additions and 0 deletions
|
@ -107,6 +107,8 @@ Table of all XEPs implemented in poezio.
|
|||
+----------+-------------------------+---------------------+
|
||||
|0352 |Client State Indication |100% |
|
||||
+----------+-------------------------+---------------------+
|
||||
|0363 |HTTP File Upload |100% |
|
||||
+----------+-------------------------+---------------------+
|
||||
|0364 |Current OTR Usage |100% |
|
||||
+----------+-------------------------+---------------------+
|
||||
|0375 |Compliance Suites 2016 |Advanced Client + |
|
||||
|
|
|
@ -293,6 +293,11 @@ Plugin index
|
|||
|
||||
Add a ``/vcard`` command to retrieve and display a vCard.
|
||||
|
||||
Upload
|
||||
:ref:`Documentation <upload-plugin>`
|
||||
|
||||
Add an ``/upload`` command to upload a file.
|
||||
|
||||
.. toctree::
|
||||
:hidden:
|
||||
|
||||
|
@ -340,3 +345,4 @@ Plugin index
|
|||
marquee
|
||||
server_part
|
||||
vcard
|
||||
upload
|
||||
|
|
59
plugins/upload.py
Normal file
59
plugins/upload.py
Normal file
|
@ -0,0 +1,59 @@
|
|||
"""
|
||||
Upload a file and auto-complete the input with its URL.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
This plugin adds a command to the chat tabs.
|
||||
|
||||
.. glossary::
|
||||
|
||||
/upload
|
||||
**Usage:** ``/upload <filename>``
|
||||
|
||||
Uploads the <filename> file to the preferred HTTP File Upload
|
||||
service (see XEP-0363) and fill the input with its URL.
|
||||
|
||||
|
||||
"""
|
||||
import asyncio
|
||||
from os.path import expanduser
|
||||
from glob import glob
|
||||
|
||||
from poezio.plugin import BasePlugin
|
||||
from poezio.core.structs import Completion
|
||||
from poezio.decorators import command_args_parser
|
||||
from poezio import tabs
|
||||
|
||||
class Plugin(BasePlugin):
|
||||
|
||||
def init(self):
|
||||
for _class in (tabs.PrivateTab, tabs.ConversationTab, tabs.MucTab):
|
||||
self.api.add_tab_command(_class, 'upload', self.command_upload,
|
||||
usage='<filename>',
|
||||
help='Upload a file and auto-complete the input with its URL.',
|
||||
short='Upload a file',
|
||||
completion=self.completion_filename)
|
||||
|
||||
@asyncio.coroutine
|
||||
def async_upload(self, filename):
|
||||
try:
|
||||
url = yield from self.core.xmpp['xep_0363'].upload_file(filename)
|
||||
except Exception as e:
|
||||
self.api.information('Failed to upload the file: %s(%s)' % (type(e), e), 'Error')
|
||||
self.core.insert_input_text(url)
|
||||
|
||||
@command_args_parser.quoted(1)
|
||||
def command_upload(self, args):
|
||||
if args is None:
|
||||
self.core.command.help('upload')
|
||||
return
|
||||
filename, = args
|
||||
filename = expanduser(filename)
|
||||
asyncio.ensure_future(self.async_upload(filename))
|
||||
|
||||
@staticmethod
|
||||
def completion_filename(the_input):
|
||||
txt = expanduser(the_input.get_text()[8:])
|
||||
files = glob(txt + '*')
|
||||
return Completion(the_input.auto_completion, files, quotify=False)
|
|
@ -174,6 +174,14 @@ class Connection(slixmpp.ClientXMPP):
|
|||
self.register_plugin('xep_0319')
|
||||
self.register_plugin('xep_0334')
|
||||
self.register_plugin('xep_0352')
|
||||
try:
|
||||
self.register_plugin('xep_0363')
|
||||
except SyntaxError:
|
||||
log.error('Failed to load HTTP File Upload plugin, it can only be '
|
||||
'used on Python 3.5+')
|
||||
except slixmpp.plugins.base.PluginNotFound:
|
||||
log.error('Failed to load HTTP File Upload plugin, it can only be '
|
||||
'used with aiohttp installed')
|
||||
self.register_plugin('xep_0380')
|
||||
self.init_plugins()
|
||||
|
||||
|
|
Loading…
Reference in a new issue