150 lines
4.7 KiB
Bash
Executable File
150 lines
4.7 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
|
|
# Dmenu for opening videos with youtube-viewer.
|
|
# MUST HAVE the *ID* at the end of custom_layout_format in youtube-viewer.conf.
|
|
# Example:
|
|
# custom_layout_format => "*TITLE* (*AUTHOR*) [*TIME*] *ID*"
|
|
|
|
# MIT License
|
|
#
|
|
# Copyright (c) 2020 Alexander Chaplin Braz
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
# of this software and associated documentation files (the "Software"), to deal
|
|
# in the Software without restriction, including without limitation the rights
|
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
# copies of the Software, and to permit persons to whom the Software is
|
|
# furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in all
|
|
# copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
# SOFTWARE.
|
|
|
|
### Add subscription system with sxiv for looking through video thumbnails
|
|
### and managing the videos.
|
|
### Set youtube-viewer arguments as variables to be able to select them like
|
|
### tags for a custom search.
|
|
### Implement search history for quickly searching again.
|
|
|
|
ScriptName=${0##*/}
|
|
Version=0.0.1
|
|
|
|
# Compose the help message:
|
|
HelpMessage="$ScriptName - Version: $Version
|
|
Creator: Alexander Chaplin Braz (https://alexchaplinbraz.com)
|
|
License: MIT
|
|
|
|
Usage: $ScriptName
|
|
|
|
MUST HAVE the *ID* at the end of custom_layout_format in youtube-viewer.conf.
|
|
Example:
|
|
custom_layout_format => \"*TITLE* (*AUTHOR*) [*TIME*] *ID*\"
|
|
"
|
|
|
|
case $1 in
|
|
-h|--help) printf '%s' "$HelpMessage"; exit 0;;
|
|
-v|--version) printf '%s - Version: %s\n' "$ScriptName" "$Version"; exit 0;;
|
|
esac
|
|
|
|
error() { printf 'ERROR: %s\n' "$1" 1>&2; }
|
|
|
|
suggest_help_and_exit() {
|
|
printf "Try '%s --help' for more information.\n" "$ScriptName" 1>&2
|
|
exit 1
|
|
}
|
|
|
|
YTURL='https://www.youtube.com/watch?v='
|
|
|
|
MenuSimple='1. Simple search.'
|
|
MenuHistory='2. History.'
|
|
MenuPlaylist='3. Playlist search.'
|
|
MenuChannel='4. Channel search.'
|
|
|
|
ChosenMenu=$(printf '%s\n%s\n%s\n%s' \
|
|
"$MenuSimple" \
|
|
"$MenuHistory" \
|
|
"$MenuPlaylist" \
|
|
"$MenuChannel" \
|
|
| dmenu -i -l 10 -p "$ScriptName:")
|
|
|
|
if [ "$ChosenMenu" = "$MenuSimple" ]; then
|
|
Search=$(printf '' | dmenu -p 'Simple search:')
|
|
[ -z "$Search" ] && exit 1
|
|
|
|
printf '%s\n' "$Search" >> "$LSHARE/dytsearchhistory"
|
|
|
|
YTID=$(youtube-viewer --no-interactive "$Search" \
|
|
| sed '/^$/d' \
|
|
| nl -n ln \
|
|
| dmenu -i -l 30 -p 'Select video:')
|
|
[ -z "$YTID" ] && exit 1
|
|
|
|
printf '%s\n' "$YTID" >> "$LSHARE/dytvideohistory"
|
|
|
|
mpv "$YTURL${YTID##* }"
|
|
|
|
elif [ "$ChosenMenu" = "$MenuHistory" ]; then
|
|
HistoryMenu=$(printf '1. Search history.\n2. Video history.' \
|
|
| dmenu -i -l 10 -p 'Which history?')
|
|
|
|
if [ "$HistoryMenu" = '1. Search history.' ]; then
|
|
Search=$(cat "$LSHARE/dytsearchhistory" \
|
|
| awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' \
|
|
| dmenu -i -l 30 -p 'Select previous search:')
|
|
[ -z "$Search" ] && exit 1
|
|
|
|
printf '%s\n' "$Search" >> "$LSHARE/dytsearchhistory"
|
|
|
|
YTID=$(youtube-viewer --no-interactive "$Search" \
|
|
| sed '/^$/d' \
|
|
| nl -n ln \
|
|
| dmenu -i -l 30 -p 'Select video:')
|
|
|
|
printf '%s\n' "$YTID" >> "$LSHARE/dytvideohistory"
|
|
|
|
elif [ "$HistoryMenu" = '2. Video history.' ]; then
|
|
YTID=$(cat "$LSHARE/dytvideohistory" \
|
|
| awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' \
|
|
| dmenu -i -l 30 -p 'Select previous video:')
|
|
|
|
else
|
|
exit 1
|
|
fi
|
|
[ -z "$YTID" ] && exit 1
|
|
|
|
mpv "$YTURL${YTID##* }"
|
|
|
|
elif [ "$ChosenMenu" = "$MenuPlaylist" ]; then
|
|
### Can't find how to change the format for anything other than video list
|
|
### so it's broken. Can parse it in another way, but it's ugly.
|
|
### Can also just open youtube-viewer as intended.
|
|
exit 1
|
|
|
|
Search=$(printf '' | dmenu -p 'Playlist search:')
|
|
[ -z "$Search" ] && exit 1
|
|
|
|
YTID=$(youtube-viewer --no-interactive -sp "$Search" \
|
|
| sed '/^$/d' \
|
|
| dmenu -i -l 30 -p 'Select playlist:')
|
|
[ -z "$YTID" ] && exit 1
|
|
|
|
mpv "$YTURL${YTID##* }"
|
|
|
|
elif [ "$ChosenMenu" = "$MenuChannel" ]; then
|
|
exit 1
|
|
|
|
elif [ -z "$ChosenMenu" ]; then
|
|
exit 1
|
|
else
|
|
error 'invalid selection.'
|
|
suggest_help_and_exit
|
|
fi
|
|
nn
|