Added multi-selection for tracks

This commit is contained in:
Medvidek77 2025-04-22 15:01:28 +02:00
parent 3c78296e58
commit e1599f840c

View file

@ -2,52 +2,52 @@
. tidler.conf # Load ENVs from config file
version="0.3.2"
version="0.3.2-beta2"
if [ -n "$PROXY_URL" ]; then
proxy_url="$PROXY_URL"
proxy_url="$PROXY_URL"
else
proxy_url="https://hifi-04ed2aaea09a.herokuapp.com" # Default value
proxy_url="https://hifi-04ed2aaea09a.herokuapp.com" # Default value
fi
if [ -n "$QUALITY" ]; then
if [ "$QUALITY" = "LOSSLESS" -o "$QUALITY" = "HI_RES" ]; then
quality="$QUALITY"
else
echo "Bad QUALITY option. Only allowed are \"LOSSLESS\", \"HI_RES\"."
echo "Using default value..."
if [ "$QUALITY" = "LOSSLESS" -o "$QUALITY" = "HI_RES" ]; then
quality="$QUALITY"
else
echo "Bad QUALITY option. Only allowed are \"LOSSLESS\", \"HI_RES\"."
echo "Using default value..."
quality="LOSSLESS" # Default value
fi
quality="LOSSLESS" # Default value
fi
else
quality="LOSSLESS" # Default value
quality="LOSSLESS" # Default value
fi
if [ -n "$COVER_RESOLUTION" ]; then
if [ "$COVER_RESOLUTION" = "1280" -o "$COVER_RESOLUTION" = "640" -o "$COVER_RESOLUTION" = "80" ]; then
cover_resolution="$COVER_RESOLUTION"
else
echo "Bad COVER_RESOLUTION option. Only allowed are \"1280\", \"640\", \"80\"."
echo "Using default value..."
if [ "$COVER_RESOLUTION" = "1280" -o "$COVER_RESOLUTION" = "640" -o "$COVER_RESOLUTION" = "80" ]; then
cover_resolution="$COVER_RESOLUTION"
else
echo "Bad COVER_RESOLUTION option. Only allowed are \"1280\", \"640\", \"80\"."
echo "Using default value..."
cover_resolution="1280" # Default value
fi
cover_resolution="1280" # Default value
fi
else
cover_resolution="1280" # Default value
cover_resolution="1280" # Default value
fi
if [ -n "$MAX_ATTEMPTS" ]; then
if [ "$MAX_ATTEMPTS" -ge 1 -a "$MAX_ATTEMPTS" -le 100 ]; then
max_attempts="$MAX_ATTEMPTS"
else
echo "Bad MAX_ATTEMPTS option. Allowed are numbers from 1 to 100."
echo "Using default value..."
if [ "$MAX_ATTEMPTS" -ge 1 -a "$MAX_ATTEMPTS" -le 100 ]; then
max_attempts="$MAX_ATTEMPTS"
else
echo "Bad MAX_ATTEMPTS option. Allowed are numbers from 1 to 100."
echo "Using default value..."
max_attempts="10" # Default value
fi
max_attempts="10" # Default value
fi
else
max_attempts="10" # Default value
max_attempts="10" # Default value
fi
@ -105,10 +105,10 @@ downloadTrack() {
if [ -n "$timed_lyrics" ]; then
lrc_success=true
elif [ "$timed_lyrics" == "null" ]; then
echo "Lyrics not found"
elif [ "$timed_lyrics" == "null" ]; then
echo "Lyrics not found"
fi
fi
fi
fi
break
fi
@ -136,7 +136,7 @@ downloadTrack() {
if [ -n "$DOWNLOADS_DIR" ]; then
download_dir="$DOWNLOADS_DIR"
else
echo "Using current path..."
echo "Using current path..."
download_dir="$(pwd)"
fi
@ -154,8 +154,8 @@ downloadTrack() {
--set-tag="ALBUM=$album_name" \
--set-tag="TRACKNUMBER=$track_number" \
${lrc_success:+--set-tag="LYRICS=$timed_lyrics"} \
--set-tag="DATE=$date" \
--set-tag="YEAR=$year" \
--set-tag="DATE=$date" \
--set-tag="YEAR=$year" \
--import-picture-from="/tmp/$cover_name" \
"$final_path/$filename"
@ -166,10 +166,10 @@ downloadTrack() {
searchTrack() {
if [ "$#" -ge 1 ]; then
track_name="$1"
track_name="$1"
else
echo "Enter track name:"
read -r track_name
echo "Enter track name:"
read -r track_name
fi
track_name=$(echo "$track_name" | sed 's/ /%20/g')
tracks=$(curl -# "$proxy_url/search/?s=$track_name" | jq -r '.items[] | "\(.id) - \(.title) by \(.artist.name)"')
@ -182,19 +182,29 @@ searchTrack() {
if [ "${#tracks_list[@]}" -eq 1 ]; then
echo "No tracks found :("
exit 1
fi
else
PS3="Please select a track: "
select t in "${tracks_list[@]}"; do
if [ -n "$t" ]; then
track_id=$(echo "$t" | awk -F ' - ' '{print $1}')
echo "You selected: $t"
downloadTrack "$track_id"
break
else
echo "Invalid selection. Please try again."
fi
done
i=0
while [ "$i" -lt "${#tracks_list[@]}" ]; do
echo "$((i + 1))) ${tracks_list["$i"]}"
i=$(( i + 1 ))
done
read -a inp
echo "${inp[0]}"
i=0
while [ "$i" -lt "${#inp[@]}" ]; do
inp2=$(("${inp[i]}" - 1))
if [ "$inp2" -ge 0 ] && [ "$inp2" -lt "${#tracks_list[@]}" ]; then
track_id=$(echo "${tracks_list["$inp2"]}" | awk -F ' - ' '{print $1}')
downloadTrack "$track_id"
else
echo "Invalid selection. Please try again."
fi
i=$(( i + 1 ))
done
fi
}
@ -269,27 +279,27 @@ searchAlbum() {
((attempt_num++))
sleep "1.$(tr -cd 0-9 </dev/urandom | head -c 5)"
else
i=0
while [ "$i" -lt "${#albums_list[@]}" ]; do
echo "$((i + 1))) ${albums_list["$i"]}"
i=0
while [ "$i" -lt "${#albums_list[@]}" ]; do
echo "$((i + 1))) ${albums_list["$i"]}"
i=$(( i + 1 ))
done
read -a inp
echo "${inp[0]}"
i=0
while [ "$i" -lt "${#inp[@]}" ]; do
inp2=$(("${inp[i]}" - 1))
if [ "$inp2" -ge 0 ] && [ "$inp2" -lt "${#albums_list[@]}" ]; then
album_id=$(echo "${albums_list["$inp2"]}" | awk -F ': ' '{print $1}')
downloadAlbum "$album_id"
else
echo "Invalid selection. Please try again."
i=$(( i + 1 ))
done
read -a inp
echo "${inp[0]}"
i=0
while [ "$i" -lt "${#inp[@]}" ]; do
inp2=$(("${inp[i]}" - 1))
if [ "$inp2" -ge 0 ] && [ "$inp2" -lt "${#albums_list[@]}" ]; then
album_id=$(echo "${albums_list["$inp2"]}" | awk -F ': ' '{print $1}')
downloadAlbum "$album_id"
else
echo "Invalid selection. Please try again."
fi
i=$(( i + 1 ))
done
success=true
fi
i=$(( i + 1 ))
done
success=true
if [ "$success" = true ]; then
break
fi
@ -311,60 +321,68 @@ searchAlbum() {
#}
if [ "$1" = "search" ]; then
if [ "$#" -ge 2 ]; then
shift
jsw="$*"
searchTrack "$jsw"
else
searchTrack
fi
if [ "$#" -ge 2 ]; then
shift
jsw="$*"
searchTrack "$jsw"
else
searchTrack
fi
elif [ "$1" = "download" ]; then
if [ "$#" -ge 2 ]; then
downloadTrack "$2"
else
downloadTrack
fi
if [ "$#" -ge 2 ]; then
downloadTrack "$2"
else
downloadTrack
fi
elif [ "$1" = "album" ]; then
if [ "$#" -ge 2 ]; then
shift
jsw="$*"
searchAlbum "$jsw"
else
searchAlbum
fi
if [ "$#" -ge 2 ]; then
shift
jsw="$*"
searchAlbum "$jsw"
else
searchAlbum
fi
elif [ "$1" == "version" ]; then
echo "TiDLer $version by Medvidek77"
echo "TiDLer $version by Medvidek77"
elif [ "$1" = "help" ]; then
echo "<MODE>"
echo ""
echo "If a valid parameter is provided, the corresponding function executes. Otherwise, TiDLer enters INTERACTIVE mode!"
echo ""
echo "<COMMANDS>"
echo ""
echo "search {track_name}-optional -> search any song"
echo ""
echo "download {song_id}-optional -> download any song"
echo ""
echo "album {album_name}-optional -> search and download any album"
echo ""
echo "version -> print TiDLer version"
echo ""
echo "help -> print this message and exit"
echo "<MODE>"
echo ""
echo "If a valid parameter is provided, the corresponding function executes. Otherwise, TiDLer enters INTERACTIVE mode!"
echo ""
echo "<COMMANDS>"
echo ""
echo "search {track_name}-optional -> search any song"
echo ""
echo "download {song_id}-optional -> download any song"
echo ""
echo "album {album_name}-optional -> search and download any album"
echo ""
echo "version -> print TiDLer version"
echo ""
echo "help -> print this message and exit"
else
echo "### Choose function! (Enter number) ###"
echo ""
echo "1. Download single track with ID"
echo ""
echo "2. Search single track with text"
echo ""
echo "3. Search and download whole album with text"
echo "### Choose function! (Enter number) ###"
echo ""
echo "1. Download single track with ID"
echo ""
echo "2. Search single track with text"
echo ""
echo "3. Search and download whole album with text"
read option
read option
if [ "$option" -eq 1 ]; then
downloadTrack
elif [ "$option" -eq 2 ]; then
searchTrack
elif [ "$option" -eq 3 ]; then
searchAlbum
fi
fi
if [ "$option" -eq 1 ]; then
downloadTrack
elif [ "$option" -eq 2 ]; then