diff --git a/home/shrc b/home/shrc index 39e9e65..4152b3f 100644 --- a/home/shrc +++ b/home/shrc @@ -185,6 +185,7 @@ rakef() ### @- make the freakin' gem! { rake && gem build *.gemspec && gem install *.gem "$@"; } alias 0x0.st="oxo" +alias oshi.at="oshi" alias rg="rg -M200" # enable colors {{{2 diff --git a/sh/oshi b/sh/oshi new file mode 100644 index 0000000..0698fbd --- /dev/null +++ b/sh/oshi @@ -0,0 +1,92 @@ +#!/usr/bin/env sh +# YES_ZSH +# YES_BASH +# YES_DASH +# YES_ASH + +__oshi() { ### @- + ### upload files (or stdin) to [oshi.at.](https://oshi.at) + ### this script exits with the number of failed uploads; up to 255 at once. + ### directories are skipped. for now, file expiry is hard-coded at 2 weeks. + ### + ### ``` + ### $ echo test | oshi + ### MANAGE: https://oshi.at/a/7809e5e8a8b5c28555b1e8cadc99b069d08a5d09 + ### DL: https://oshi.at/ReTn/Dxzy + ### + ### $ oshi ~/play/{hey,you,fake,empty} + ### MANAGE: https://oshi.at/a/9b56e4c5843006d491fabe859ea5746a8f36760c + ### DL: https://oshi.at/obFf/hey + ### oshi: expires in 14 days: /home/notwa/play/hey + ### MANAGE: https://oshi.at/a/f2dc46ae900ca7465a377d7a7942e722f87ff483 + ### DL: https://oshi.at/JLBc/you + ### oshi: expires in 14 days: /home/notwa/play/you + ### oshi: no such file: /home/notwa/play/fake + ### oshi: skipping directory: /home/notwa/play/empty + ### oshi: successfully uploaded 2/4 files + ### oshi: failed to upload 2/4 files + ### ``` + + inform() { printf '\033[1moshi: %s\033[m\n' "$*"; } >&2 + mutter() { printf '\033[31moshi: %s\033[m\n' "$*"; } >&2 + lament() { printf '\033[1;33moshi: %s\033[m\n' "$*"; } >&2 + recede() { printf '\033[1;31moshi: %s\033[m\n' "$*"; } >&2 + + hits=0 total=0 + + if [ $# = 0 ]; then + curl -f -F f=@- -F expire=20160 -F randomizefn=1 https://oshi.at && hits=1 || true + total=1 + elif [ $# -gt 255 ]; then + recede "too many arguments (max: 255)" + return 255 + else + total=$# + fi + + for f; do + if [ ! -e "$f" ]; then + mutter "no such file: $f" + continue + elif [ -d "$f" ]; then + mutter "skipping directory: $f" + continue + elif [ ! -s "$f" ]; then + mutter "skipping empty file: $f" + continue + fi + + # i have no idea why, but mingw64 curl on msys2 is replacing each unicode codepoint with a question mark. + # the irony is that it seems to be properly decoding the UTF-8 encoding and then replacing it all anyway. + [ -d /C ] && g="$(LC_ALL= cygpath -ws "$f")" || g="$f" + + bytes="$(du -b -- "$f")" || bytes=0 + if [ "$bytes" -gt 5000000000 ] 2>&-; then + mutter "file too large: $f" + continue + fi + + if curl -fg -F f=@"$g" -F expire=20160 -F filename="${f##*/}" https://oshi.at; then + inform "expires in 14 days: $f" + : $((hits+=1)) + else + mutter "failed to upload file: $f" + fi + done + + if [ $hits -gt 0 ]; then + [ $hits = 1 ] && s= || s=s + inform "successfully uploaded $hits/$total file$s" + fi + + fails=$((total-hits)) + if [ $fails -gt 0 ]; then + [ $fails = 1 ] && s= || s=s + recede "failed to upload $fails/$total file$s" + fi + + return $fails +} + +oshi()(__oshi "$@") +[ -n "${preload+-}" ] || __oshi "$@"