Add routines for handling stupid URI formatting to Plumber.

This commit is contained in:
Mid Favila 2022-01-26 17:04:23 -04:00
parent effb7907a1
commit 88ebb40c38
1 changed files with 59 additions and 14 deletions

73
plumber
View File

@ -32,36 +32,80 @@ edgecase()
err() err()
{ {
printf "Plumber wasn't able to find a way to handle the following URI.\n%s\nError code: %s\nProbable reason: %s\n" "${1}" "${2}" "${3}"|xmessage -file - & printf "Plumber wasn't able to find a way to handle the following URI.\n%s\nError code: %s\nProbable reason: %s\n" "${1}" "${2}" "${3}"|xmessage -file - &
exit 1
} }
case "${2}" in case "${2}" in
0) set -- "${1}" "${2}" "Some other error." ;; 0) set -- "${1}" "${2}" "Some other error." ;;
1) set -- "${1}" "${2}" "It doesn't exist on the local filesystem." ;; 1) set -- "${1}" "${2}" "It doesn't exist on the local filesystem." ;;
2) set -- "${1}" "${2}" "There was a parsing error."
esac esac
err "${@}" err "${@}"
} }
cleanse_prefix()
{
if [ "$(printf "%s" "${1}")" = 'f' ]
then
printf "%s\n" "$(printf "%s" "${1}"|sed -ne 's&file://\(.*\)&\1&p')"
else
printf "%s" "${1}"
fi
}
cleanse_spaces()
{
if [ "$(echo "${1}"|grep -c '%20')" = '1' ]
then
printf "%s\n" "${1}"|sed -e 's&%20& *&g'
else
printf "%s\n" "${1}"
fi
}
cleanse_leftparen()
{
if [ "$(echo "${1}"|grep -c '%28')" = '1' ]
then
printf "%s\n" "${1}"|sed -e 's&%28&(&g'
else
printf "%s\n" "${1}"
fi
}
cleanse_rightparen()
{
if [ "$(echo "${1}"|grep -c '%29')" = '1' ]
then
printf "%s\n" "${1}"|sed -e 's&%29&)&g'
else
printf "%s\n" "${1}"
fi
}
local_handler() local_handler()
{ {
cleanse_prefix()
{
printf "%s" "$(printf "%s" "${1}" | sed -ne 's&file://&&p')"
}
target="$(cleanse_prefix "${1}")"
if [ -e "${target}" ] set -- "$(cleanse_prefix "${1}")"
set -- "$(cleanse_leftparen "${1}")"
set -- "$(cleanse_rightparen "${1}")"
if [ -e "${1}" ]
then then
mime="$(file --mime-type -b "${target}")" mime="$(file --mime-type -b "${1}")"
case ${mime} in case ${mime} in
*html*) exec Links "${target}" & ;; *html*) exec Links "${1}" & ;;
text*) exec xless "${target}" & ;; text*) exec xless "${1}" & ;;
video*) exec fpv "${target}" & ;; video*) exec fpv "${1}" & ;;
audio*) exec fpm "${target}" & ;; audio*) exec fpm "${1}" & ;;
image*) exec iview "${target}" & ;; image*) exec iview "${1}" & ;;
*pdf) exec gv "${target}" & ;; *pdf) exec gv "${1}" & ;;
*) exec exit 1 ;; #Abort. This should never be reached. *) set -- "${1}" "2" ;; #Abort.
esac esac
else else
# Set the error code and throw an error. # Set the error code and throw an error.
@ -82,6 +126,7 @@ case "$(printf "%s" "${1}"|cut -b 1,2,3,4)" in
then then
local_handler "${@}" local_handler "${@}"
else else
set -- "${1}" "2"
edgecase "${@}" edgecase "${@}"
fi fi
esac esac