Skip to content

Commit bfdf3e0

Browse files
committed
feat(scope): can return to the previous menu with ctr+q
1 parent 467e4cd commit bfdf3e0

1 file changed

Lines changed: 52 additions & 39 deletions

File tree

yt-cli.sh

Lines changed: 52 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -37,26 +37,35 @@ get_youtube()
3737
{
3838
if [[ $1 -eq 0 ]]; then
3939
NUM_SELECTED=$(fzf --style full --header "Select the desired $3" --bind "start,ctrl-r:reload:echo \"󰌑 Return\"; i=0; while [[ \"\$i\" != \"-1\" ]]; do feed=\$(yt-dlp -i -q --flat-playlist \"$BASE$2/$3\" --playlist-start \$((\$i*100+1)) --playlist-end \$((\$i*100+100)) --print \"%(playlist_index)d: %(title)s\"); i=\$((\$i+1)); [[ \"\$feed\" != \"\" ]] && echo \$feed; [[ \"\$(echo \$feed | wc -l)\" -lt \"100\" ]] && i=-1; done" | awk -F: '{print $1}')
40-
if [[ $NUM_SELECTED == "󰌑 Return" ]]; then
41-
echo "󰌑 Return"
42-
else
43-
yt-dlp -q --ignore-errors --no-warnings --flat-playlist "$BASE$2/$3" --print url --playlist-items "$NUM_SELECTED" 2> /dev/null
44-
fi
40+
case "$NUM_SELECTED" in
41+
"󰌑 Return"|"")
42+
echo "󰌑 Return"
43+
;;
44+
*)
45+
yt-dlp -q --ignore-errors --no-warnings --flat-playlist "$BASE$2/$3" --print url --playlist-items "$NUM_SELECTED" 2> /dev/null
46+
;;
47+
esac
4548
else
4649
NUM_SELECTED=$( ( echo "󰌑 Return"; echo "󰐑 See all"; echo "󰲹 Music mode all"; echo "󰇚 Download all"; echo "󰐒 Save list"; yt-dlp -q --ignore-errors --no-warnings --flat-playlist "$2" --print "%(playlist_index)d: %(title)s" 2> /dev/null ) | fzf --style full --header "Select the desired videos" | awk -F: '{print $1}')
47-
if [ "$NUM_SELECTED" = '󰌑 Return' ] || [ "$NUM_SELECTED" = "󰐑 See all" ] || [ "$NUM_SELECTED" = "󰲹 Music mode all" ] || [ "$NUM_SELECTED" = "󰇚 Download all" ] || [ "$NUM_SELECTED" = "󰐒 Save list" ]; then
48-
echo "$NUM_SELECTED"
49-
else
50-
yt-dlp -q --ignore-errors --no-warnings --flat-playlist "$2" --print url --playlist-items "$NUM_SELECTED" 2> /dev/null
51-
fi
50+
case "$NUM_SELECTED" in
51+
"󰐑 See all"|"󰲹 Music mode all"|"󰇚 Download all"|"󰐒 Save list")
52+
echo "$NUM_SELECTED"
53+
;;
54+
"󰌑 Return"|"")
55+
echo "󰌑 Return"
56+
;;
57+
*)
58+
yt-dlp -q --ignore-errors --no-warnings --flat-playlist "$2" --print url --playlist-items "$NUM_SELECTED" 2> /dev/null
59+
;;
60+
esac
5261
fi
5362
}
5463

5564
# Create a menu to know what type of content you want from a channel.
5665
# Returns the content you want to see {videos, playlists, ...}.
5766
type_media_search_menu()
5867
{
59-
echo -en "󰌑 Return\n videos\n󰐑 playlists\n streams\n shorts" | fzf --style full --header 'What content do you want?' | awk '{print $2}'
68+
echo -en "󰌑 Return\n videos\n󰐑 playlists\n streams\n shorts" | fzf --style full --header 'What content do you want?' | awk '{print $2}'
6069
}
6170

6271
# Perform all necessary actions to obtain the video playlist ... from a subscribed channel.
@@ -66,37 +75,41 @@ subscribed_menu()
6675
[[ -f $PATH_SUBSCRIBED_CHANNELS ]] || touch $PATH_SUBSCRIBED_CHANNELS
6776
SUBSCRIBED_CHANNEL_SELECTED=-1
6877
SUBSCRIBED_CHANNELS=$SUBSCRIBED_CHANNELS$(echo "󰌑 Return";cat $PATH_SUBSCRIBED_CHANNELS)
69-
while [[ "$SUBSCRIBED_CHANNEL_SELECTED" != "󰌑 Return" ]]; do
78+
while ! { [ "$SUBSCRIBED_CHANNEL_SELECTED" == "󰌑 Return" ] || [ "$SUBSCRIBED_CHANNEL_SELECTED" == "" ]; }; do
7079
SUBSCRIBED_CHANNEL_SELECTED=$(menu "$SUBSCRIBED_CHANNELS" "--header \"Select channel to see or add them in path=$PATH_SUBSCRIBED_CHANNELS\"" 1)
71-
if [[ "$SUBSCRIBED_CHANNEL_SELECTED" != "󰌑 Return" ]]; then
80+
if ! { [ "$SUBSCRIBED_CHANNEL_SELECTED" == "󰌑 Return" ] || [ "$SUBSCRIBED_CHANNEL_SELECTED" == "" ]; }; then
7281
TYPE_MEDIA_SEARCH_SELECTED=-1
7382
while [[ $TYPE_MEDIA_SEARCH_SELECTED != "Return" ]]; do
7483
TYPE_MEDIA_SEARCH_SELECTED=$(type_media_search_menu)
75-
# INFO: Playlist search mode.
76-
if [[ "$TYPE_MEDIA_SEARCH_SELECTED" == playlists ]]; then
77-
local URL_PLAYLIST=-1
78-
while [[ "$URL_PLAYLIST" != "󰌑 Return" ]]; do
79-
URL_PLAYLIST=$(shift; get_youtube 0 "$SUBSCRIBED_CHANNEL_SELECTED" "$TYPE_MEDIA_SEARCH_SELECTED")
80-
if [[ "$URL_PLAYLIST" != "󰌑 Return" ]]; then
81-
local URL=-1
82-
while [[ "$URL" != "󰌑 Return" ]]; do
83-
URL=$(get_youtube 1 "$URL_PLAYLIST")
84-
if [[ "$URL" != "󰌑 Return" ]]; then
85-
shift; open_video "$URL"
86-
fi
87-
done
88-
fi
89-
done
90-
# INFO: Direct video, short, stream search mode.
91-
elif [[ $TYPE_MEDIA_SEARCH_SELECTED != "Return" ]]; then
92-
local URL=-1
93-
while [[ "$URL" != "󰌑 Return" ]]; do
94-
URL=$(shift; get_youtube 0 "$SUBSCRIBED_CHANNEL_SELECTED" "$TYPE_MEDIA_SEARCH_SELECTED")
95-
if [[ "$URL" != "󰌑 Return" ]]; then
96-
shift; open_video "$URL"
97-
fi
98-
done
99-
fi
84+
case "$TYPE_MEDIA_SEARCH_SELECTED" in
85+
"Return"|"")
86+
TYPE_MEDIA_SEARCH_SELECTED="Return"
87+
;;
88+
"playlists")
89+
local URL_PLAYLIST=-1
90+
while [[ "$URL_PLAYLIST" != "󰌑 Return" ]]; do
91+
URL_PLAYLIST=$(shift; get_youtube 0 "$SUBSCRIBED_CHANNEL_SELECTED" "$TYPE_MEDIA_SEARCH_SELECTED")
92+
if [[ "$URL_PLAYLIST" != "󰌑 Return" ]]; then
93+
local URL=-1
94+
while [[ "$URL" != "󰌑 Return" ]]; do
95+
URL=$(get_youtube 1 "$URL_PLAYLIST")
96+
if [[ "$URL" != "󰌑 Return" ]]; then
97+
shift; open_video "$URL"
98+
fi
99+
done
100+
fi
101+
done
102+
;;
103+
*)
104+
local URL=-1
105+
while [[ "$URL" != "󰌑 Return" ]]; do
106+
URL=$(shift; get_youtube 0 "$SUBSCRIBED_CHANNEL_SELECTED" "$TYPE_MEDIA_SEARCH_SELECTED")
107+
if [[ "$URL" != "󰌑 Return" ]]; then
108+
shift; open_video "$URL"
109+
fi
110+
done
111+
;;
112+
esac
100113
done
101114
fi
102115
done
@@ -110,7 +123,7 @@ main_menu()
110123
}
111124

112125
# Run the script until it stops.
113-
while [[ "$MAIN_MENU" -ne "4" ]]; do
126+
while ! { [ "$MAIN_MENU" == "4" ] || [ "$MAIN_MENU" == "" ]; }; do
114127
MAIN_MENU=$(main_menu)
115128
case "$MAIN_MENU" in
116129
1) shift; subscribed_menu

0 commit comments

Comments
 (0)