add interactive mode
This commit is contained in:
parent
26f508a320
commit
7f2f0b36f7
2 changed files with 102 additions and 37 deletions
72
README.org
72
README.org
|
|
@ -39,7 +39,7 @@
|
||||||
|
|
||||||
#+begin_src sh
|
#+begin_src sh
|
||||||
function print_usage {
|
function print_usage {
|
||||||
echo "tyt [ -a* | --alternative ] \"QUERY\""
|
echo "tyt [ (-a* | --alternative) | (-i | --interactive) ] \"QUERY\""
|
||||||
}
|
}
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
|
@ -49,12 +49,14 @@
|
||||||
We have the following flags:
|
We have the following flags:
|
||||||
|
|
||||||
- =a*|alternative= :: Alternative video (optional); You can parse any amount of alternatives (e.g. =-aaa=)
|
- =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.
|
Additionally we have exacly one mandatory quoted string as query.
|
||||||
|
|
||||||
#+begin_src sh
|
#+begin_src sh
|
||||||
alternative=0
|
alternative=0
|
||||||
format="flac"
|
format="flac"
|
||||||
|
interactive=false
|
||||||
help=false
|
help=false
|
||||||
|
|
||||||
for arg in "$@"
|
for arg in "$@"
|
||||||
|
|
@ -69,6 +71,10 @@
|
||||||
alternative=1
|
alternative=1
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
-i|--interactive)
|
||||||
|
interactive=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
-h|--help)
|
-h|--help)
|
||||||
help=true
|
help=true
|
||||||
shift
|
shift
|
||||||
|
|
@ -100,9 +106,9 @@
|
||||||
If the arguments match, print a greeter.
|
If the arguments match, print a greeter.
|
||||||
|
|
||||||
#+begin_src sh
|
#+begin_src sh
|
||||||
echo -ne "\n \e[1m \ /\e[0m\n"
|
echo -ne "\n \e[1m\ /\e[0m\n"
|
||||||
echo -ne " \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"
|
echo -ne " \e[1m=======\e[0m\n\n"
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
|
@ -114,9 +120,15 @@
|
||||||
|
|
||||||
#+begin_src sh
|
#+begin_src sh
|
||||||
i=0
|
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
|
until results=$(youtube-dl --default-search "ytsearch" -j "ytsearch$n:$query") &> /dev/null
|
||||||
do
|
do
|
||||||
|
|
@ -136,25 +148,56 @@
|
||||||
;;
|
;;
|
||||||
esac
|
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))
|
i=$(((i + 1) % 4))
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
done
|
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 '"')
|
urls=$(echo $results | jq '.webpage_url' | tr -d '"')
|
||||||
|
titles=$(echo $results | jq '.fulltitle' | tr -d '"')
|
||||||
|
uploaders=$(echo $results | jq '.uploader' | tr -d '"')
|
||||||
|
|
||||||
OLDIFS=$IFS
|
OLDIFS=$IFS
|
||||||
IFS=$'\n'
|
IFS=$'\n'
|
||||||
results=($results)
|
|
||||||
urls=($urls)
|
urls=($urls)
|
||||||
|
titles=($titles)
|
||||||
|
uploaders=($uploaders)
|
||||||
IFS=$OLDIFS
|
IFS=$OLDIFS
|
||||||
|
#+end_src
|
||||||
|
|
||||||
result=${results[$alternative]}
|
*** Interactive selection
|
||||||
url=${urls[$alternative]}
|
|
||||||
|
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
|
#+end_src
|
||||||
|
|
||||||
*** Play video
|
*** Play video
|
||||||
|
|
@ -162,13 +205,6 @@
|
||||||
Finally the video is played via mpv.
|
Finally the video is played via mpv.
|
||||||
|
|
||||||
#+begin_src sh
|
#+begin_src sh
|
||||||
i=0
|
echo -ne "Playing: \e[32m\e[1m$title\e[0m (\e[33m\e[1m$uploader\e[0m)\n"
|
||||||
|
|
||||||
title=$(echo $result | jq '.fulltitle')
|
|
||||||
title="${title%\"}"
|
|
||||||
title="${title#\"}"
|
|
||||||
|
|
||||||
echo -ne "Playing: \e[32m\e[1m$title\e[0m"
|
|
||||||
|
|
||||||
mpv $url &> /dev/null
|
mpv $url &> /dev/null
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
|
||||||
65
tyt
65
tyt
|
|
@ -10,11 +10,12 @@ then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
function print_usage {
|
function print_usage {
|
||||||
echo "tyt [ -a* | --alternative ] \"QUERY\""
|
echo "tyt [ (-a* | --alternative) | (-i | --interactive) ] \"QUERY\""
|
||||||
}
|
}
|
||||||
|
|
||||||
alternative=0
|
alternative=0
|
||||||
format="flac"
|
format="flac"
|
||||||
|
interactive=false
|
||||||
help=false
|
help=false
|
||||||
|
|
||||||
for arg in "$@"
|
for arg in "$@"
|
||||||
|
|
@ -29,6 +30,10 @@ do
|
||||||
alternative=1
|
alternative=1
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
-i|--interactive)
|
||||||
|
interactive=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
-h|--help)
|
-h|--help)
|
||||||
help=true
|
help=true
|
||||||
shift
|
shift
|
||||||
|
|
@ -54,15 +59,21 @@ fi
|
||||||
|
|
||||||
query="${other_arguments[0]}"
|
query="${other_arguments[0]}"
|
||||||
|
|
||||||
echo -ne "\n \e[1m \ /\e[0m\n"
|
echo -ne "\n \e[1m\ /\e[0m\n"
|
||||||
echo -ne " \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"
|
echo -ne " \e[1m=======\e[0m\n\n"
|
||||||
|
|
||||||
i=0
|
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
|
until results=$(youtube-dl --default-search "ytsearch" -j "ytsearch$n:$query") &> /dev/null
|
||||||
do
|
do
|
||||||
|
|
@ -82,32 +93,50 @@ do
|
||||||
;;
|
;;
|
||||||
esac
|
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))
|
i=$(((i + 1) % 4))
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
done
|
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 '"')
|
urls=$(echo $results | jq '.webpage_url' | tr -d '"')
|
||||||
|
titles=$(echo $results | jq '.fulltitle' | tr -d '"')
|
||||||
|
uploaders=$(echo $results | jq '.uploader' | tr -d '"')
|
||||||
|
|
||||||
OLDIFS=$IFS
|
OLDIFS=$IFS
|
||||||
IFS=$'\n'
|
IFS=$'\n'
|
||||||
results=($results)
|
|
||||||
urls=($urls)
|
urls=($urls)
|
||||||
|
titles=($titles)
|
||||||
|
uploaders=($uploaders)
|
||||||
IFS=$OLDIFS
|
IFS=$OLDIFS
|
||||||
|
|
||||||
result=${results[$alternative]}
|
if [ "$interactive" = true ]
|
||||||
url=${urls[$alternative]}
|
then
|
||||||
|
echo ""
|
||||||
i=0
|
selections=(0 1 2 3 4 5 6 7 8 9)
|
||||||
|
for i in ${selections[@]}
|
||||||
title=$(echo $result | jq '.fulltitle')
|
do
|
||||||
title="${title%\"}"
|
echo -ne " \e[1m$i\e[0m: ${titles[$i]} (\e[33m\e[1m${uploaders[$i]}\e[0m)\n"
|
||||||
title="${title#\"}"
|
done
|
||||||
|
echo -ne "\nSelection: "
|
||||||
echo -ne "Playing: \e[32m\e[1m$title\e[0m"
|
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
|
||||||
|
|
||||||
|
echo -ne "Playing: \e[32m\e[1m$title\e[0m (\e[33m\e[1m$uploader\e[0m)\n"
|
||||||
mpv $url &> /dev/null
|
mpv $url &> /dev/null
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue