make some things better #7

Closed
trinity wants to merge 5 commits from (deleted):main into main
1 changed files with 74 additions and 55 deletions

View File

@ -1,66 +1,85 @@
#!/bin/sh
set -e
INPUT=$(echo $1)
echo "Loading configuration..."
CONFIG=$(cat /etc/xdg-sanity/xdg-sanity.conf)
BROWSER=$(echo $CONFIG | sed -ne 's/^browser *= *//p')
argv0="$0"
if [ "$BROWSER" = "" ]
then
echo "Please place the path to your default browser's executable in /etc/xdg-sanity/xdg-sanity.conf"
exit
else
echo "Found default browser $BROWSER"
# cats out the configuration or {'\n', EOF} if it can't be found
stream_config(){
for file in \
"$HOME"/.config/xdg-sanity.conf \
"$HOME"/.xdg-sanity.conf \
/etc/xdg-sanity/xdg-sanity.conf \
/dev/null
do
cat "$file" 2>/dev/null \
&& break \
|| true
done
}
# check if usage is valid
if ! test -n "$1"; then
printf "Usage: %s [resource...]\n" "$argv0" 1>&2
exit 64 # sysexits(3) EX_USAGE
fi
echo "Loading extensions..."
for EXT in /etc/xdg-sanity/extensions/*.sh
do
if [ "$EXT" = "/etc/xdg-sanity/extensions/*.sh" ]
then
echo "No extensions to load"
else
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
echo "Modifying $INPUT..."
INPUT=$($EXT "$INPUT")
echo "Got $INPUT"
else
if [ "$TYPE" = "mime" ]
then
echo "Modifying MIME type..."
MIME=$($EXT "$INPUT")
echo "Got $MIME"
fi
# check if we have curl(1)
if ! command -v curl >/dev/null 2>&1; then
printf "%s: Missing dependency: curl(1)\n" "$argv0" 1>&2
exit 71 # sysexits(3) EX_OSERR
fi
done
# 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')"
# check if we have a $BROWSER
if ! test -n "$BROWSER"; then
printf "\
%s: \$BROWSER not filled.
Please place the path to your default browser's executable in
/etc/xdg-sanity/xdg-sanity.conf
" "$argv0" 1>&2
exit 71 # sysexits(3) EX_OSERR
fi
while test -n "$1"; do
argv1="$1"
# use curl(1) to write out the request header's content_type,
# strip everything after the first semicolon,
# chop off any weird whitespace remnants
MIME="$(curl -Ls -o /dev/null -w '%{content_type}' $1 | sed 's/\;.*//' | xargs echo)"
# RESPONSE_CODE=$(curl -fLIs "$INPUT" | sed -ne 's/ [[:space:]]*$//p' | sed -ne 's|^HTTP/.\+ ||p')
for extension in /etc/xdg-sanity/extensions/*.sh; do
! [ "$extension" = "/etc/xdg-sanity/extensions/*.sh" ] || break
# switch(extension_type)
case "$(sed -ne 's/^# EXT-TYPE=//p' <"$extension" | xargs echo)" in
replace)
argv1="$("$extension" "$argv1")"
;;
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" 1>&2
[ "$(command -v handlr)" = "false" ] \
&& printf "'handlr' program not found\n" 1>&2 \
|| printf "non-zero exit status\n" 1>&2
fi
shift
done
if [ "$MIME" = "" ] || [ "$MIME" = "$1" ] || [ "$MIME" = "$INPUT" ]
then
echo "Determining MIME type of $INPUT:"
# Determines HTTP code, might use for something else?
# CODE=$(curl -fLIs "$INPUT" | sed -ne 's/ [[:space:]]*$//p' | sed -ne 's|^HTTP/.\+ ||p')
MIME=$(curl -fLIs "$INPUT" | sed -ne 's/^[cC]ontent-[tT]ype: //p' | sed -e 's/;.\+//p' | tail -n1 | tr -d '\r')
echo $MIME
fi
if [ "$MIME" = "text/html" ]
then
$BROWSER $INPUT
else
handlr launch "$MIME" -- "$INPUT"
fi
exit 0