diff --git a/uploadr.py b/uploadr.py index 9719c0c..423accf 100755 --- a/uploadr.py +++ b/uploadr.py @@ -6,6 +6,7 @@ import logging import requests import argparse +import tempfile from sleekxmpp import ClientXMPP from sleekxmpp.exceptions import IqError, IqTimeout, XMPPError @@ -24,6 +25,14 @@ def __init__(self, jid, password, filename, shorten_url): self.filename = filename self.shorten_url = shorten_url + def process_txt_stdin(self): + data = sys.stdin.read(20*1024*1024) + try: + data.decode("UTF-8") + except: + return False + return data + def session_start(self, event): self.send_presence() @@ -32,7 +41,18 @@ def session_start(self, event): # Upload File try: - get_url = self['xep_0363'].upload_file(self.filename) + if self.filename == '-': + text = self.process_txt_stdin() + if not text: + print "I don't upload binary data from STDIN!" + self.disconnect() + return + fh = tempfile.NamedTemporaryFile(suffix='.txt', prefix='uploadr-') + fh.write(text) + fh.flush() + get_url = self['xep_0363'].upload_file(fh.name) + else: + get_url = self['xep_0363'].upload_file(self.filename) if self.shorten_url: print self.short(get_url) else: @@ -84,7 +104,7 @@ def short(self, url): parser.add_argument("-j", "--jid", help="JID", required=not(jid)) parser.add_argument("-p", "--password", help="Password", required=not(password)) parser.add_argument("-s", "--short", help="Use https://yerl.org to shorten URL", action="store_true", required=False, ) - parser.add_argument("filename", help="File to upload") + parser.add_argument("filename", nargs='?', default='-', help="File to upload") args = parser.parse_args() if args.jid: @@ -93,5 +113,8 @@ def short(self, url): password = args.password xmpp = Uploadr(jid, password, args.filename, args.short) - xmpp.connect() - xmpp.process(block=True) + try: + xmpp.connect() + xmpp.process(block=True) + except KeyboardInterrupt: + pass