117 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| set -e
 | |
| 
 | |
| argv0="$0"
 | |
| 
 | |
| # grabs configuration files
 | |
| CONFIG="$XDG_CONFIG_HOME"/xdg-sanity.toml
 | |
| if ! test -e "$CONFIG"; then
 | |
| 	touch "$CONFIG"
 | |
| 	CONFIG=/etc/xdg-sanity.toml
 | |
| 	if ! test -e "$CONFIG"; then
 | |
| 		exit 66 # sysexits(3) EX_NOINPUT
 | |
| 	fi
 | |
| fi
 | |
| 
 | |
| 
 | |
| # 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
 | |
| 
 | |
| # 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
 | |
| 
 | |
| # check if we have tomcat(1)
 | |
| if ! command -v tomcat >/dev/null 2>&1; then
 | |
| 	printf "%s: Missing dependency: stoml(1)\n" "$argv0" 1>&2
 | |
| 	exit 71 # sysexits(3) EX_OSERR
 | |
| fi
 | |
| 
 | |
| # set the XDG_COMMAND
 | |
| test -n "$XDG_COMMAND" || XDG_COMMAND="$(tomcat tools.xdg $CONFIG)"
 | |
| ! command -v handlr >/dev/null 2>&1 && ! command -v xdg-open >/dev/null 2>&1 \
 | |
|     && XDG_COMMAND=false \
 | |
| 		|| true
 | |
| 
 | |
| 
 | |
| # check if we have a BROWSER
 | |
| test -n "$BROWSER" || BROWSER="$(tomcat tools.browser $CONFIG)"
 | |
| if ! test -n "$BROWSER"; then
 | |
| 	printf "\
 | |
| %s: \$BROWSER not filled.
 | |
| 	Please place the path to your preferred browser's executable in
 | |
| 	$XDG_CONFIG_HOME/xdg-sanity.conf or /etc/xdg-sanity.conf
 | |
| " "$argv0" 1>&2
 | |
| 	exit 71 # sysexits(3) EX_OSERR
 | |
| fi
 | |
| 
 | |
| while test -n "$1"; do
 | |
| 	URL="$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)"
 | |
| 
 | |
| 	# get the pattern for the extensions to MATCH
 | |
| 	MATCH=$(printf "%s\n" "$URL" | sed -ne 's/^h.\+\/\///p' |\
 | |
| 		sed -e 's/\/.*\+//g')
 | |
| 	
 | |
| 	# run through MIME extensions
 | |
| 	for file in \
 | |
| 		"$XDG_DATA_HOME"/xdg-sanity/*-mime.toml \
 | |
| 	  /usr/share/xdg-sanity/*-mime.toml \
 | |
| 		/dev/null
 | |
| 	do
 | |
| 		i=$(tomcat replace.urls "$file" | sed 's/	/\n/g' | xargs wc -l)
 | |
| 		while ! [ "$i" = 0 ]; do
 | |
| 		  if [ "$MATCH" = "$(tomcat replace.urls[$i] $file)" ]; then
 | |
| 				  MIME=$(tomcat with.mime "$file")
 | |
| 			fi
 | |
| 			i=$(dc -e "$i 1 - p")
 | |
| 	  done
 | |
| 	done
 | |
| 
 | |
| 	# and the replace extensions
 | |
| 	for file in \
 | |
| 		"$XDG_DATA_HOME"/xdg-sanity/*-replace.toml \
 | |
| 	  /usr/share/xdg-sanity/*-replace.toml \
 | |
| 		/dev/null
 | |
| 	do
 | |
|     i=$(tomcat replace.urls "$file" | sed 's/	/\n/g' | xargs wc -l)
 | |
| 		while ! [ "$i" = 0 ]; do
 | |
| 		  if [ "$MATCH" = "$(tomcat replace.urls[$i] $file)" ]; then
 | |
| 				  URL=$(tomcat with.url "$file")
 | |
| 			fi
 | |
| 			i=$(dc -e "$i 1 - p")
 | |
| 	  done
 | |
| 	done
 | |
| 
 | |
|   # these commands may fail; this is intentional
 | |
| 	if [ "$MIME" = "text/html" ]; then
 | |
| 		"$BROWSER" "$URL"
 | |
| 	else
 | |
| 		case "$(command -v $XDG_COMMAND)" in
 | |
| 			*/handlr )
 | |
| 				"XDG_COMMAND" "$MIME" -- "$URL"
 | |
| 				;;
 | |
| 			*/xdg-open )
 | |
| 			  "$(xdg-mime query default $MIME)" "$URL"
 | |
| 				;;
 | |
| 			false )
 | |
| 				exit 69 # sysexits(3) EX_UNAVAILABLE
 | |
| 				;;
 | |
| 		esac
 | |
| 	fi
 | |
| 	shift
 | |
| done
 | |
| 
 | |
| exit 0
 |