summaryrefslogtreecommitdiffstats
path: root/fb
diff options
context:
space:
mode:
authorFlorian Pritz <bluewind@xssn.at>2010-06-08 20:51:18 +0200
committerFlorian Pritz <bluewind@xssn.at>2010-06-08 20:51:18 +0200
commit85b34b7733e5b1b80797e3e8929ea5a3ceef7b3f (patch)
treeaebaedab0553e2c0903f0003dbc2437415ce0814 /fb
parent3bbb7a400a253f776e60eff44a386c898eb8014d (diff)
downloadbin-85b34b7733e5b1b80797e3e8929ea5a3ceef7b3f.tar.gz
bin-85b34b7733e5b1b80797e3e8929ea5a3ceef7b3f.tar.xz
fb: rewrite in bash
Signed-off-by: Florian Pritz <bluewind@xssn.at>
Diffstat (limited to 'fb')
-rwxr-xr-xfb152
1 files changed, 61 insertions, 91 deletions
diff --git a/fb b/fb
index 98a5256..06dd87e 100755
--- a/fb
+++ b/fb
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/bin/bash
#----------------------------------------------------
# Author: Florian "Bluewind" Pritz <flo@xssn.at>
#
@@ -7,104 +7,74 @@
#
#----------------------------------------------------
# only works if useragent contains libcurl
-# Dependencies: python, curl
+# Dependencies: curl
# Optional: xclip
#----------------------------------------------------
-'''[cat |] %prog [options] [file1 file2 ...]'''
-__version__ = '0.5.3'
-__desc__ = '''
-Upload/nopaste file/stdin to paste.xinu.at and copy URL to clipboard.
-~/.netrc: machine paste.xinu.at password PASSWORD
-'''
+VERSION="0.6.1"
-from optparse import OptionParser
-from subprocess import Popen, PIPE
-from urllib2 import urlopen
-import os
-import sys
-import netrc
-import re
+DELETE=0
+EXTENSION=""
+GET=0
+PASTEBIN="http://paste.xinu.at"
-def do_upload(file, extension=None):
- curl_args = []
- if extension:
- curl_args.append('-F')
- curl_args.append('extension=%s' % extension)
+do_upload() {
+ local EXTRA=""
+ if [[ -n $EXTENSION ]]; then
+ EXTRA="-F extension=$EXTENSION"
+ fi
+ URL="$(curl -# -n -L $EXTRA -F "file=@$1" "$PASTEBIN/file/do_upload")"
+ echo $URL
+ echo -n "$URL" | nohup &> /dev/null xclip
+}
- url = Popen(merge([['curl', '-#', '-n', '-L', '-F', 'file=@%s' % file,
- ], curl_args, ['http://paste.xinu.at/file/do_upload']]),
- stdout=PIPE).communicate()[0].rstrip()
- print url
- Popen('echo -n "%s" | nohup >/dev/null xclip 2>&1' % url, shell=True)
+read_stdin() {
+ if tty -s; then
+ echo "^C to exit, ^D to send"
+ fi
+ cat > "$1"
+}
-def get(id):
- print urlopen('http://paste.xinu.at/%s' % id).read()
+help() {
+ echo "fb-client version $VERSION"
+ echo "usage: [cat |] $(basename "$0") [switches] [file(s)|ID(s)]"
+ echo " Upload/nopaste file/stdin to paste.xinu.at and copy URL to clipboard."
+ echo " ~/.netrc: machine paste.xinu.at password PASSWORD"
+ echo ""
+ echo "Switches:"
+ echo " -e EXTENSION extension for default highlighting (e.g. \"diff\")"
+ echo " -d delete the IDs"
+ echo " -g download the IDs and output on stdout (use with care!)"
+ echo " -h this help"
+ exit 0
+}
-def merge(seq):
- merged = []
- for s in seq:
- for x in s:
- merged.append(x)
- return merged
+while getopts ":e:gdh" OPTION; do
+ case $OPTION in
+ e) EXTENSION="$OPTARG";;
+ g) GET=1;;
+ d) DELETE=1;;
+ h) help;;
+ \?) echo "unknown option \"-$OPTARG\"" >&2; exit 1;;
+ :) echo "Option \"-$OPTARG\" needs an argument" >&2; exit 1;;
+ esac
+done
-def read_stdin(tmpfile):
- if os.isatty(sys.stdin.fileno()):
- print '^C to exit, ^D to send'
- try:
- content = sys.stdin.read()
- except KeyboardInterrupt:
- sys.exit()
- if not content:
- sys.exit()
- tmpfile = tmpfile.replace('\n', '')
- f = open(tmpfile, 'w')
- f.write(content)
- f.close()
- return tmpfile
+shift $((OPTIND - 1))
-def main():
- p = OptionParser(version=__version__,
- usage=__doc__,
- description=__desc__)
- p.add_option('-d', '--delete', action='store_true', dest='delete',
- help='delete IDs', default=False)
- p.add_option('-e', '--extension', action='store', dest='extension',
- help='extension for default highlighting (e.g. "diff")', default=None)
- p.add_option('-g', '--get', action='store_true', dest='get',
- help='Download File IDs and output to stdout (use with care!)', default=False)
- options, args = p.parse_args()
+TMPDIR="$(mktemp -d "/tmp/fb.XXXXXX")"
- tmpfiles = []
- tmpdir = Popen(['mktemp', '-d'], stdout=PIPE).communicate()[0]
- tmpdir = tmpdir.replace('\n', '')
- if args:
- for arg in args:
- if options.delete:
- Popen(['curl', '-#', '-n', '-L', 'http://paste.xinu.at/file/delete/%s' % arg]).communicate()[0]
- continue
-
- if options.get:
- get(arg)
- continue
-
- if re.match('[a-z]+://.+', arg):
- os.chdir(tmpdir)
- tmpfiles.append(tmpdir)
- Popen(['curl', '-#', '-O', arg]).communicate()[0]
- for file in os.listdir(tmpdir):
- do_upload(file, extension=options.extension)
- else:
- do_upload(arg, extension=options.extension)
- else:
- tmpfile = read_stdin(tmpdir+"/stdin")
- tmpfiles.append(tmpfile)
- do_upload(tmpfile, extension=options.extension)
-
- os.chdir('/tmp')
- for path in tmpfiles:
- Popen(['rm', '-rf', path])
- Popen(['rm', '-rf', tmpdir])
-
-if __name__ == '__main__':
- main()
+if (($# == 0)); then
+ read_stdin "$TMPDIR/stdin"
+ do_upload "$TMPDIR/stdin"
+else
+ for i in "$@"; do
+ if [[ $DELETE == 1 ]]; then
+ curl -n -L "$PASTEBIN/file/delete/$i"
+ elif [[ $GET == 1 ]]; then
+ curl -s -o - "$PASTEBIN/$i"
+ else
+ do_upload $i
+ fi
+ done
+fi