#!/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