POSIX_Scripts/plumber

82 lines
2.0 KiB
Bash
Executable File

#!/bin/sh -e
web_handler()
{
# Choose a random invidious instance to distribute load.
# Good digital citizenship is important, you know.
rand_inst()
{
case $(($(rand)%6)) in
0) printf "vid.puffyan.us" ;;
1) printf "inv.riverside.rocks" ;;
2) printf "invidious.kavin.rocks" ;;
3) printf "invidious-us.kavin.rocks" ;;
4) printf "invidious.osi.kr" ;;
5) printf "invidio.xamh.de" ;;
esac
}
case "${1}" in
*youtu*) exec Links "$(printf "%s" "${1}"|sed -ne \
"s&\(http.*://\).*\(/.*\)&\1$(rand_inst)\2&p")" & ;;
*reddit*) exec Links "$(printf "%s" "${1}"|sed -ne \
"s&\(http.*://\).*\(/.*/\)&\1libredd.it\2&p")" & ;;
*4chan.org*) exec Links "$(printf "%s" "${1}"|sed -ne \
"s&4chan&4channel&p")" & ;;
*) exec Links "${1}" & ;;
esac
}
local_handler()
{
cleanse_prefix()
{
printf "%s" "$(echo "${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}" = '/' ]
then
local_handler "${1}"
else
err "${1}"
fi
}
# Commented lines will have support in the future.
case "$(printf "%s" "${1}"|cut -b 1,2,3,4)" in
# gopher) err "${@}" ;;
http) web_handler "${@}" ;;
file) local_handler "${@}" ;;
# ftp) err "${@}" ;;
# ssh) err "${@}" ;;
*) edgecase "${2}" ;;
esac
exit