1 changed files with 75 additions and 35 deletions
@ -1,41 +1,81 @@ |
|||
#!/bin/sh -e |
|||
|
|||
rand_inst() # Choose a random invidious instance to distribute load. |
|||
# Good digital citizenship is important, you know. |
|||
web_handler() |
|||
{ |
|||
case $(($(dd bs=2 count=1 if=/dev/random of=/dev/stdout | od - | \ |
|||
sed -ne 's& *& &gp' | cut -d ' ' -f2) % 3)) in |
|||
0) printf "vid.puffyan.us" ;; |
|||
1) printf "ytprivate.com" ;; |
|||
2) printf "yewtu.be" ;; |
|||
esac |
|||
# 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 |
|||
} |
|||
|
|||
if [ "$(printf "%s" "${1}"|cut -b 1,2,3,4)" = "http" ] |
|||
then |
|||
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 |
|||
|
|||
else |
|||
|
|||
mime=$(file --mime-type -b "${1}") |
|||
|
|||
case ${mime} in |
|||
*html*) exec Links "${1}" & ;; |
|||
text*) exec xless "${1}" & ;; |
|||
video*) exec fpv "${1}" & ;; |
|||
audio*) exec fpm "${1}" & ;; |
|||
image*) exec iview "${1}" & ;; |
|||
*pdf) exec gv "${1}" & ;; |
|||
*) printf "Plumber ran into an edge case with the following string/mime\n%s"\ |
|||
"${1}"|xmessage -file - & ;; |
|||
esac |
|||
fi |
|||
|
|||
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 |
|||
|
Loading…
Reference in new issue