diff --git a/plumber b/plumber index e65ef82..ad14774 100755 --- a/plumber +++ b/plumber @@ -27,45 +27,47 @@ web_handler() esac } +edgecase() +{ + 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 - & + } + + case "${2}" in + 0) set -- "${1}" "${2}" "Some other error." ;; + 1) set -- "${1}" "${2}" "It doesn't exist on the local filesystem." ;; + esac + + err "${@}" +} local_handler() { cleanse_prefix() { - printf "%s" "$(echo "${1}" | sed -ne 's&file://&&p')" + printf "%s" "$(printf "%s" "${1}" | sed -ne 's&file://&&p')" } target="$(cleanse_prefix "${1}")" - mime="$(file --mime-type -b "${target}")" - - case ${mime} in - *html*) exec Links "${target}" & ;; - text*) exec xless "${target}" & ;; - video*) exec fpv "${target}" & ;; - audio*) exec fpm "${target}" & ;; - image*) exec iview "${target}" & ;; - *pdf) exec gv "${target}" & ;; - *) edgecase ;; - esac -} - - -edgecase() -{ - err() - { - printf "Plumber wasn't able to find a way to handle the following URI.\n%s\n" "${1}" - } - - # If first character is / or a ~ and it exists, we're dealing with local data. - firstchar=$(echo"${1}"|cut -b1) - if [ "${firstchar}" = '~' || "${firstchar}" = '/' ] + if [ -e "${target}" ] then - local_handler "${1}" - else - err "${1}" - fi + mime="$(file --mime-type -b "${target}")" + case ${mime} in + *html*) exec Links "${target}" & ;; + text*) exec xless "${target}" & ;; + video*) exec fpv "${target}" & ;; + audio*) exec fpm "${target}" & ;; + image*) exec iview "${target}" & ;; + *pdf) exec gv "${target}" & ;; + *) exec exit 1 ;; #Abort. This should never be reached. + esac + else + # Set the error code and throw an error. + set -- "${1}" "1" + edgecase "${@}" + fi } # Commented lines will have support in the future. @@ -75,7 +77,13 @@ case "$(printf "%s" "${1}"|cut -b 1,2,3,4)" in file) local_handler "${@}" ;; # ftp) err "${@}" ;; # ssh) err "${@}" ;; - *) edgecase "${2}" ;; + *) firstchar=$(printf "%s" "${1}"|cut -b1) + if [ "${firstchar}" = '~' ] || [ "${firstchar}" = '/' ] + then + local_handler "${@}" + else + edgecase "${@}" + fi esac exit