#!/bin/sh

SELF="${0##*/}"

if [ -z "$TMPDIR" ]; then
  TMPDIR=/tmp
elif [ -d "${TMPDIR}/volatile" ]; then
  TMPDIR="${TMPDIR}/volatile"
fi
export TMPDIR
TMPDIR=$(mktemp -dp "$TMPDIR" mutt.XXXXXXXXXX)
cleanup() { cd / && rm -rf "$TMPDIR"; }
trap cleanup 1 2 3 4 5 6 7 8 10 11 12 13 14 15

cd "$TMPDIR"

notify() {
  if [ -x "$(command -v awesome-client)" ]; then
    awesome-client <<-_eof
	local naughty = require("naughty")
	naughty.notify({ preset = naughty.config.presets.low,
		title  = "$3",
		text   = [[stdout:
		$(sed -e 's,\",\\\",g' "$1")
		stderr:
		$(sed -e 's,\",\\\",g' "$2")]]
		})
	_eof
  fi
}

case "$SELF" in
  (bgrun)
    # make a copy of the file, then launch a shell process in the background
    # to divert to run-mailcap, after which the temporary directory gets
    # cleaned up.
    cp -a "$1" $TMPDIR
    MIMETYPE="$2"
    (
      run-mailcap --action=view "$MIMETYPE":"$TEMPFILE"
      if [ -s "$TMPDIR/output.stdout" ] || [ -s "$TMPDIR/output.stderr" ]; then
        notify $TMPDIR/output.stdout $TMPDIR/output.stderr \
          "Output from mutt/$SELF on $BASENAME"
      fi
      cleanup
    ) &
    trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15
    ;;
  (browserrun)
    # hack to stay around until the browser has read the file: make a fifo and
    # wait for the cat process to finish writing to it, which means that it
    # must have been consumed on the other end.
    mkfifo "$TEMPFILE"
    INPUTFILE="$1"
    cat "$INPUTFILE" > $TEMPFILE &
    sensible-browser "$TEMPFILE" > $TMPDIR/output.stdout 2> $TMPDIR/output.stderr
    wait
    cleanup
    ;;
esac