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