diff options
author | Adam T. Carpenter <atc@53hor.net> | 2021-02-26 21:17:24 -0500 |
---|---|---|
committer | Adam T. Carpenter <atc@53hor.net> | 2021-02-26 21:17:24 -0500 |
commit | fef48aa78c305db6b5be81bff5facacba0a76f5f (patch) | |
tree | fa377e83d338a5a52a214bd2ab5dda0fcb255904 /url_handler.sh | |
parent | 98fbc511035711d8aa9aecf9e588ad4677d017df (diff) | |
download | scripts-fef48aa78c305db6b5be81bff5facacba0a76f5f.tar.xz scripts-fef48aa78c305db6b5be81bff5facacba0a76f5f.zip |
moved all yt.sh into url_handler, added searching
Diffstat (limited to 'url_handler.sh')
-rwxr-xr-x | url_handler.sh | 101 |
1 files changed, 95 insertions, 6 deletions
diff --git a/url_handler.sh b/url_handler.sh index 858a8fb..5ae6c59 100755 --- a/url_handler.sh +++ b/url_handler.sh @@ -1,10 +1,99 @@ #!/bin/sh -echo $1 +# Everything I would ever need to do with a URL. -case $1 in - *youtube.com*) yt.sh $1 ;; - *youtu.be*) yt.sh $1 ;; - *mailto*) mutt $1 ;; - *) $BROWSER $1 ;; +DOWNLOAD_DIR=$HOME/downloads + +# Prompt for a URL or search term +get_url() { + dmenu -p "URL or search" +} + +# Action for YouTube URLs +get_action() { + action=$(dmenu -p "YouTube action" << EOF +1. watch +2. video download +3. audio download +EOF + ) + echo "$action" | cut -d'.' -f1 +} + + +# Get title, description, and duration of YouTube URL +toast_info() { + info=$(youtube-dl --get-title --get-description --get-duration "$1") + title=$(echo "$info" | head -n 1) + description=$(echo "$info" | sed '1d;$d') + duration=$(echo "$info" | tail -n 1) + notify-send "($duration) $title" "$description" +} + + +## Download video +video_download() { + mkdir -p "$DOWNLOAD_DIR" + youtube-dl \ + -q \ + --add-metadata \ + -o "$DOWNLOAD_DIR/%(title)s_%(id)s.%(ext)s" \ + "$1" && notify-send "Video download done." & + notify-send "Downloading video:" +} + + +## Download audio +audio_download() { + mkdir -p "$DOWNLOAD_DIR" + youtube-dl \ + -q \ + --add-metadata \ + -o "$DOWNLOAD_DIR/%(title)s_%(id)s.%(ext)s" \ + -x \ + --audio-format flac \ + --audio-quality 0 \ + "$1" && notify-send "Audio download done." & + notify-send "Downloading audio:" +} + + +## Play video +play() { + URL="${1#http?://}" + mpv --no-terminal --geometry=25%-10-40 --title="Streaming from YouTube" "ytdl://$URL" & + notify-send "Playing:" +} + +# Handle YouTube URLs +handle_youtube() { + URL=$1 + toast_info "$URL" & + + case "$(get_action)" in + 1) + play "$URL" + ;; + 2) + video_download "$URL" + ;; + 3) + audio_download "$URL" + esac +} + +# Main +URL=$1 +[ -n "$URL" ] || URL=$(get_url) +[ -n "$URL" ] || exit +echo "$URL" + +case $URL in + *youtube.com*) handle_youtube "$URL" ;; + *youtu.be*) handle_youtube "$URL" ;; + *ytsearch:*) handle_youtube "$URL" ;; + *mailto*) mutt "$URL" ;; + *http?*) $BROWSER "$URL" ;; + *) + $BROWSER --search "$URL" esac |