#!/usr/bin/env sh

# QR code encode/decode wrapper for plaintext transfer between devices

key="$(tr -cd 'a-z0-9' < /dev/urandom | dd bs=7 count=1 2> /dev/null)"
tmp="${XDG_RUNTIME_DIR:-/tmp}/.$key"

case "$1" in
	-c) # create QR from stdin/string argument
		[ ! -f /dev/stdin ] || set -- -r /dev/stdin
		qrencode -s 1 -o - "$@" | feh - -Z --force-aliasing;;

	-d) # decode QR image from stdin/webcam
		unset f; [ ! -f /dev/stdin ] || f='img'
		zbar${f:-cam} --raw - < /dev/stdin > "$tmp" 2> /dev/null &
		# exit after first successful scan
		trap 'kill $! 2> /dev/null; rm -f "$tmp"; exit' 0 1 2 3 6 15
		while [ ! -s "$tmp" ]; do sleep 1; done
		cat "$tmp";;

	*) echo 'usage: qr [ -c "STRING" | -d ] [ < stdin ]' && exit 1
esac