add interactive mode

This commit is contained in:
Denis Lehmann 2021-03-15 00:22:35 +01:00
parent 26f508a320
commit 7f2f0b36f7
2 changed files with 102 additions and 37 deletions

View file

@ -39,7 +39,7 @@
#+begin_src sh
function print_usage {
echo "tyt [ -a* | --alternative ] \"QUERY\""
echo "tyt [ (-a* | --alternative) | (-i | --interactive) ] \"QUERY\""
}
#+end_src
@ -49,12 +49,14 @@
We have the following flags:
- =a*|alternative= :: Alternative video (optional); You can parse any amount of alternatives (e.g. =-aaa=)
- =i|interactive= :: Interactive mode; Shows the first 10 results and queries for a selection; If this flag is set, =-a= is ignored
Additionally we have exacly one mandatory quoted string as query.
#+begin_src sh
alternative=0
format="flac"
interactive=false
help=false
for arg in "$@"
@ -69,6 +71,10 @@
alternative=1
shift
;;
-i|--interactive)
interactive=true
shift
;;
-h|--help)
help=true
shift
@ -102,7 +108,7 @@
#+begin_src sh
echo -ne "\n \e[1m\ /\e[0m\n"
echo -ne " \e[1m=======\e[0m\n"
echo -ne " | \e[31m\e[1mtyt\e[0m |\n"
echo -ne " \e[1m| \e[31mtyt\e[0m \e[1m|\e[0m\n"
echo -ne " \e[1m=======\e[0m\n\n"
#+end_src
@ -114,9 +120,15 @@
#+begin_src sh
i=0
n=$((alternative+1))
echo -ne "Searching for: \e[33m\e[1m$query\e[0m \r"
if [ "$interactive" = true ]
then
n=10
else
n=$((alternative+1))
fi
echo -ne "Searching for: \e[34m\e[1m$query\e[0m \r"
until results=$(youtube-dl --default-search "ytsearch" -j "ytsearch$n:$query") &> /dev/null
do
@ -136,25 +148,56 @@
;;
esac
echo -ne "Searching for: \e[33m\e[1m$query\e[0m $appendix\r"
echo -ne "Searching for: \e[34m\e[1m$query\e[0m $appendix\r"
i=$(((i + 1) % 4))
sleep 1
done
echo -ne "Searching for: \e[33m\e[1m$query\e[0m \n"
echo -ne "Searching for: \e[34m\e[1m$query\e[0m \n"
urls=$(echo $results | jq '.webpage_url' | tr -d '"')
titles=$(echo $results | jq '.fulltitle' | tr -d '"')
uploaders=$(echo $results | jq '.uploader' | tr -d '"')
OLDIFS=$IFS
IFS=$'\n'
results=($results)
urls=($urls)
titles=($titles)
uploaders=($uploaders)
IFS=$OLDIFS
#+end_src
result=${results[$alternative]}
*** Interactive selection
If the interactive flag is present, show the first ten results and query for a video to play.
#+begin_src sh
if [ "$interactive" = true ]
then
echo ""
selections=(0 1 2 3 4 5 6 7 8 9)
for i in ${selections[@]}
do
echo -ne " \e[1m$i\e[0m: ${titles[$i]} (\e[33m\e[1m${uploaders[$i]}\e[0m)\n"
done
echo -ne "\nSelection: "
read selection
while [[ ! "${selections[@]}" =~ "${selection}" ]]
do
echo -ne "Not valid, try again: "
read selection
done
echo ""
url=${urls[$selection]}
title=${titles[$selection]}
uploader=${uploaders[$selection]}
else
url=${urls[$alternative]}
title=${titles[$alternative]}
uploader=${uploaders[$alternative]}
fi
#+end_src
*** Play video
@ -162,13 +205,6 @@
Finally the video is played via mpv.
#+begin_src sh
i=0
title=$(echo $result | jq '.fulltitle')
title="${title%\"}"
title="${title#\"}"
echo -ne "Playing: \e[32m\e[1m$title\e[0m"
echo -ne "Playing: \e[32m\e[1m$title\e[0m (\e[33m\e[1m$uploader\e[0m)\n"
mpv $url &> /dev/null
#+end_src

61
tyt
View file

@ -10,11 +10,12 @@ then
fi
function print_usage {
echo "tyt [ -a* | --alternative ] \"QUERY\""
echo "tyt [ (-a* | --alternative) | (-i | --interactive) ] \"QUERY\""
}
alternative=0
format="flac"
interactive=false
help=false
for arg in "$@"
@ -29,6 +30,10 @@ do
alternative=1
shift
;;
-i|--interactive)
interactive=true
shift
;;
-h|--help)
help=true
shift
@ -56,13 +61,19 @@ query="${other_arguments[0]}"
echo -ne "\n \e[1m\ /\e[0m\n"
echo -ne " \e[1m=======\e[0m\n"
echo -ne " | \e[31m\e[1mtyt\e[0m |\n"
echo -ne " \e[1m| \e[31mtyt\e[0m \e[1m|\e[0m\n"
echo -ne " \e[1m=======\e[0m\n\n"
i=0
n=$((alternative+1))
echo -ne "Searching for: \e[33m\e[1m$query\e[0m \r"
if [ "$interactive" = true ]
then
n=10
else
n=$((alternative+1))
fi
echo -ne "Searching for: \e[34m\e[1m$query\e[0m \r"
until results=$(youtube-dl --default-search "ytsearch" -j "ytsearch$n:$query") &> /dev/null
do
@ -82,32 +93,50 @@ do
;;
esac
echo -ne "Searching for: \e[33m\e[1m$query\e[0m $appendix\r"
echo -ne "Searching for: \e[34m\e[1m$query\e[0m $appendix\r"
i=$(((i + 1) % 4))
sleep 1
done
echo -ne "Searching for: \e[33m\e[1m$query\e[0m \n"
echo -ne "Searching for: \e[34m\e[1m$query\e[0m \n"
urls=$(echo $results | jq '.webpage_url' | tr -d '"')
titles=$(echo $results | jq '.fulltitle' | tr -d '"')
uploaders=$(echo $results | jq '.uploader' | tr -d '"')
OLDIFS=$IFS
IFS=$'\n'
results=($results)
urls=($urls)
titles=($titles)
uploaders=($uploaders)
IFS=$OLDIFS
result=${results[$alternative]}
if [ "$interactive" = true ]
then
echo ""
selections=(0 1 2 3 4 5 6 7 8 9)
for i in ${selections[@]}
do
echo -ne " \e[1m$i\e[0m: ${titles[$i]} (\e[33m\e[1m${uploaders[$i]}\e[0m)\n"
done
echo -ne "\nSelection: "
read selection
while [[ ! "${selections[@]}" =~ "${selection}" ]]
do
echo -ne "Not valid, try again: "
read selection
done
echo ""
url=${urls[$selection]}
title=${titles[$selection]}
uploader=${uploaders[$selection]}
else
url=${urls[$alternative]}
title=${titles[$alternative]}
uploader=${uploaders[$alternative]}
fi
i=0
title=$(echo $result | jq '.fulltitle')
title="${title%\"}"
title="${title#\"}"
echo -ne "Playing: \e[32m\e[1m$title\e[0m"
echo -ne "Playing: \e[32m\e[1m$title\e[0m (\e[33m\e[1m$uploader\e[0m)\n"
mpv $url &> /dev/null