From 85b34b7733e5b1b80797e3e8929ea5a3ceef7b3f Mon Sep 17 00:00:00 2001 From: Florian Pritz Date: Tue, 8 Jun 2010 20:51:18 +0200 Subject: fb: rewrite in bash Signed-off-by: Florian Pritz --- fb | 152 ++++++++++++++++++++++++++++----------------------------------------- 1 file changed, 61 insertions(+), 91 deletions(-) (limited to 'fb') 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 # @@ -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 -- cgit v1.2.3-24-g4f1b