make it work with extensions

This commit is contained in:
dtb 2022-09-09 22:00:17 -04:00
parent 2fce1e39ef
commit c8aba752da

View File

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
set -e
argv0="$0" argv0="$0"
argv1="$1"
# cats out the configuration or {'\n', EOF} if it can't be found # cats out the configuration or {'\n', EOF} if it can't be found
stream_config(){ stream_config(){
@ -23,6 +23,11 @@ if ! command -v curl >/dev/null 2>&1; then
exit 71 # sysexits(3) EX_OSERR exit 71 # sysexits(3) EX_OSERR
fi fi
# check if we have handlr(1), but we might not need it
if ! command -v handlr >/dev/null 2>&1; then
alias handlr=false
fi
test -n "$BROWSER" || BROWSER="$(stream_config | sed -ne 's/^browser *= *//p')" test -n "$BROWSER" || BROWSER="$(stream_config | sed -ne 's/^browser *= *//p')"
# check if we have a $BROWSER # check if we have a $BROWSER
@ -31,39 +36,44 @@ if ! test -n "$BROWSER"; then
%s: \$BROWSER not filled. %s: \$BROWSER not filled.
Please place the path to your default browser's executable in Please place the path to your default browser's executable in
/etc/xdg-sanity/xdg-sanity.conf /etc/xdg-sanity/xdg-sanity.conf
" "$0" " "$argv0"
exit 71 # sysexits(3) EX_OSERR exit 71 # sysexits(3) EX_OSERR
fi fi
MIME="$(curl -s -o /dev/null -w '%{content_type}' $1 | sed 's/\;.*//' | xargs echo)" while test -n "$1"; do
# RESPONSE_CODE=$(curl -fLIs "$INPUT" | sed -ne 's/ [[:space:]]*$//p' | sed -ne 's|^HTTP/.\+ ||p') argv1="$1"
for EXT in /etc/xdg-sanity/extensions/*.sh; do # use curl(1) to write out the request header's content_type,
if [ "$EXT" = "/etc/xdg-sanity/extensions/*.sh" ]; then # strip everything after the first semicolon,
echo "No extensions to load" # chop off any weird whitespace remnants
else MIME="$(curl -Ls -o /dev/null -w '%{content_type}' $1 | sed 's/\;.*//' | xargs echo)"
for EXT in /etc/xdg-sanity/extensions/*.sh; do
TYPE=$(cat $EXT | sed -ne 's/^# EXT-TYPE=//p' | tr -d '\n')
echo "Found $TYPE extension $EXT"
if [ "$TYPE" = "replace" ]; then # RESPONSE_CODE=$(curl -fLIs "$INPUT" | sed -ne 's/ [[:space:]]*$//p' | sed -ne 's|^HTTP/.\+ ||p')
echo "Modifying $INPUT..."
argv1=$($EXT "$argv1") for extension in /etc/xdg-sanity/extensions/*.sh; do
echo "Got $INPUT" ! [ "$extension" = "/etc/xdg-sanity/extensions/*.sh" ] || break
elif [ "$TYPE" = "mime" ]; then # switch(extension_type)
echo "Modifying MIME type..." case "$(sed -ne 's/^# EXT-TYPE=//p' <"$extension" | xargs echo)" in
MIME="$($EXT "$argv1")" replace)
echo "Got $MIME" argv1="$("$extension" "$argv1")"
fi ;;
done mime)
argv1="$("$extension" "$argv1")"
;;
esac
done
# these commands may fail; this is intentional
if [ "$MIME" = "text/html" ]; then
"$BROWSER" "$argv1"
elif ! handlr launch "$MIME" -- "$argv1"; then
printf "%s: %s: handlr(1) failed: " "$argv0" "$argv1"
[ "$(command -v handlr)" = "false" ] \
&& printf "'handlr' program not found\n" \
|| printf "non-zero exit status\n"
fi fi
shift
done done
# determine the MIME type, strip everything after the first semicolon, and exit 0
# check to see if it's HTML
if [ "$MIME"= "text/html" ]; then
$BROWSER "$1"
else
handlr launch "$MIME" -- "$1"
fi