From 2fce1e39efa8586c019d3da1135daf9b7b2a85a2 Mon Sep 17 00:00:00 2001 From: dtb Date: Fri, 9 Sep 2022 21:34:14 -0400 Subject: [PATCH] (WIP) merge in upstream --- xdg-sanity.sh | 111 ++++++++++++++++++++++++++------------------------ 1 file changed, 57 insertions(+), 54 deletions(-) diff --git a/xdg-sanity.sh b/xdg-sanity.sh index 3ee015c..fb320c2 100755 --- a/xdg-sanity.sh +++ b/xdg-sanity.sh @@ -1,66 +1,69 @@ #!/bin/sh -INPUT=$(echo $1) -echo "Loading configuration..." -CONFIG=$(cat /etc/xdg-sanity/xdg-sanity.conf) -BROWSER=$(echo $CONFIG | sed -ne 's/^browser *= *//p') +argv0="$0" +argv1="$1" -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(){ + cat "$HOME"/.xdg-sanity.conf 2>/dev/null \ + || cat "$HOME"/.config/xdg-sanity.conf 2>/dev/null \ + || cat /etc/xdg-sanity/xdg-sanity.conf 2>/dev/null \ + || echo # empty line +} + +# check if usage is valid +if ! test -n "$1"; then + printf "Usage: %s [resource...]\n" "$argv0" + 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" + exit 71 # sysexits(3) EX_OSERR fi -done +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 +" "$0" + exit 71 # sysexits(3) EX_OSERR fi +MIME="$(curl -s -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 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..." + argv1=$($EXT "$argv1") + echo "Got $INPUT" + elif [ "$TYPE" = "mime" ]; then + echo "Modifying MIME type..." + MIME="$($EXT "$argv1")" + echo "Got $MIME" + fi + done + fi + 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 - +# determine the MIME type, strip everything after the first semicolon, and +# check to see if it's HTML +if [ "$MIME"= "text/html" ]; then + $BROWSER "$1" else -handlr launch "$MIME" -- "$INPUT" -fi \ No newline at end of file + handlr launch "$MIME" -- "$1" +fi