diff options
| -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 | 
