diff options
Diffstat (limited to '.local/bin/linkhandler')
-rwxr-xr-x | .local/bin/linkhandler | 84 |
1 files changed, 54 insertions, 30 deletions
diff --git a/.local/bin/linkhandler b/.local/bin/linkhandler index c703eba..5dd42e7 100755 --- a/.local/bin/linkhandler +++ b/.local/bin/linkhandler @@ -1,44 +1,68 @@ -#!/bin/sh +#!/usr/bin/env bash -note() -{ +note() { command -v notify-send > /dev/null && - notify-send " linkhandler" "$1" + notify-send " linkhandler" "$1" +} + +die() { + printf "\033[31;1merr: %b\033[0m\n" "$1" + note "$1" + exit "${2:-1}" +} + +curl_cmd() { + curl "$@" \ + --silent \ + --location \ + --compressed +} + +stream() { + note "streaming ${2:-media}" + exec mpv --force-window -quiet "$1" > /dev/null 2>&1 +} + +download() { + note "downloading ${2:-$1}" + + out="/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" + curl_cmd "$1" -o "$out" || die "download failed: $1" + xdg-open "$out" + rm -rf "$out" +} + +domain_switch() { + case "${1%/}" in + *youtube.com/*|*youtu.be/*) + stream "$1" + ;; + *) + exec firefox "$1" + ;; + esac } ######## # MAIN # ######## -[ -z "$1" ] && - exec "${BROWSER:-firefox}" +if [ -z "$1" ]; then + exec firefox +elif echo "$1" | grep -Eqx '^https?://[^/]*\.onion(/.*)?'; then + exec tor-browser "$1" +fi -case "${1%/}" in -*mp3|*flac|*opus|*mkv|*webm|*mp4|*youtube.com/watch*|\ -*youtube.com/playlist*|*youtu.be*|*bitchute.com*|*videos.lukesmith.xyz*|\ -*piped.kavin.rocks*|*inv.vern.cc*|*yewtu.be*) - note "streaming media" - exec mpv -quiet "$1" > /dev/null 2>&1 - ;; -*.png|*.jpg|*.jpeg|*.gif|*.webp|*.pdf|*.cbz|*.cbr) - note "processing file" - curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" && - exec xdg-open "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" > /dev/null 2>&1 & +type="$(curl_cmd "$1" --write-out '%header{content-type}' -o /dev/null)" +case "$type" in +video/*) ;& +audio/*) + stream "$1" "$type" ;; -*.c|*.cpp|*.sh|*.txt|*.java|*.nix|*.lua|*.py|*.toml) - note "processing text" - curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" && - exec xdg-open "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" > /dev/null 2>&1 & +text/html*) + domain_switch "$1" ;; *) - if echo "$1" | grep -Eqx '^https?://[^/]*\.onion(/.*)?'; then - if ! command -v tor-browser > /dev/null; then - note "tor browser not installed" - exit 1 - fi - exec tor-browser "$1" >/dev/null 2>&1 - else - exec "$BROWSER" "$1" >/dev/null 2>&1 - fi + download "$1" "$type" ;; esac |