diff --git a/README.md b/README.md index ab9a180..648161d 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ - Create install scripts/guides (WIP) - Migrate from Bash to a POSIX-compliant shell - Add Cover, and other metadata to vorbis tag (Almost done) -- Lyrics download (Almost done) +- Lyrics download (WIP) - Implement search & download for playlists, albums, and artists (WIP) - Support downloading multiple search results - Allow users to choose audio quality (currently defaults to LOSSLESS) diff --git a/scripts/ArchLinux/PKGBUILD b/scripts/ArchLinux/PKGBUILD index d3eb27a..a5d0a4e 100644 --- a/scripts/ArchLinux/PKGBUILD +++ b/scripts/ArchLinux/PKGBUILD @@ -1,8 +1,8 @@ # Maintainer: Medvidek77 pkgname=tidler -pkgver=0.3.1 -pkgrel=1 +pkgver=0.3.0 +pkgrel=3 pkgdesc="Tidal music downloader based on the hifi-tui API" arch=('any') url="https://git.medvidek77.tech/Medvidek77/tidler" diff --git a/scripts/ArchLinux/PKGBUILD-git b/scripts/ArchLinux/PKGBUILD-git index 48ee014..611a132 100644 --- a/scripts/ArchLinux/PKGBUILD-git +++ b/scripts/ArchLinux/PKGBUILD-git @@ -1,8 +1,8 @@ # Maintainer: Medvidek77 pkgname=tidler -pkgver=0.3.2-beta2 -pkgrel=1 +pkgver=0.3.0 +pkgrel=3 pkgdesc="Tidal music downloader based on the hifi-tui API" arch=('any') url="https://git.medvidek77.tech/Medvidek77/tidler" diff --git a/src/tidler b/src/tidler index 4bd7ddf..e015973 100755 --- a/src/tidler +++ b/src/tidler @@ -1,56 +1,55 @@ -#!/usr/bin/env bash +#!/bin/bash . tidler.conf # Load ENVs from config file -version="0.3.2-beta2" +version="0.3.0" 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 - - + downloadTrack() { if [ "$#" -ge 1 ]; then echo "Downloading track with ID: $1" @@ -60,56 +59,39 @@ downloadTrack() { read -r id fi + if [ "$#" -ge 2 ]; then + album_dir="$2" + else + album_dir="" + fi + attempt_num=1 success=false - lrc_success=false - while [ $attempt_num -le $max_attempts ]; do json_data=$(curl -# "$proxy_url/track/?id=$id&quality=$quality") - + if [ $? -eq 0 ]; then track_name=$(echo "$json_data" | jq -r '.[0].title // empty') - + if [ -n "$track_name" ]; then artist_name=$(echo "$json_data" | jq -r '.[0].artist.name // empty') - + if [ -n "$artist_name" ]; then album_name=$(echo "$json_data" | jq -r '.[0].album.title // empty') - + if [ -n "$album_name" ]; then url=$(echo "$json_data" | jq -r '.[-1].OriginalTrackUrl // empty') - + if [ -n "$url" ]; then cover_data=$(curl -# "$proxy_url/cover/?id=$id") cover_url=$(echo "$cover_data" | jq -r '.[]["1280"] // empty') - - - if [ -n "$cover_url" ]; then - date_data=$(echo "$json_data" | jq -r '.[0].streamStartDate // empty' ) - date=$(expr substr "$date_data" 1 10) - year=$(expr substr "$date_data" 1 4) - - - if [ -n "$year" ]; then - track_number=$(echo "$json_data" | jq -r '.[0].trackNumber') - filename="$track_name.flac" - cover_name="tidler_temp_cover_$track_name.png" - success=true - - lyrics_data=$(curl -# "$proxy_url/lyrics/?id=$id") - - if [ $? -eq 0 ]; then - timed_lyrics=$(echo "$lyrics_data" | jq -r '.[0].subtitles') - - if [ -n "$timed_lyrics" ]; then - lrc_success=true - - elif [ "$timed_lyrics" == "null" ]; then - echo "Lyrics not found" - fi - fi - fi + + if [ -n "$cover_url" ]; then + track_number=$(echo "$json_data" | jq -r '.[0].trackNumber') + filename="$track_name.flac" + cover_name="cover.png" + success=true break fi fi @@ -118,58 +100,51 @@ downloadTrack() { fi fi - if [ "$success" = false ]; then echo "Attempt $attempt_num failed. Retrying..." ((attempt_num++)) - sleep "1.$(tr -cd 0-9 < /dev/urandom | head -c 5)" + sleep "1.$(tr -cd 0-9 " - echo "" - echo "If a valid parameter is provided, the corresponding function executes. Otherwise, TiDLer enters INTERACTIVE mode!" - echo "" - echo "" - 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 "" + echo "" + echo "If a valid parameter is provided, the corresponding function executes. Otherwise, TiDLer enters INTERACTIVE mode!" + echo "" + echo "" + 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" - - read option - - if [ "$option" -eq 1 ]; then - downloadTrack - elif [ "$option" -eq 2 ]; then - searchTrack - elif [ "$option" -eq 3 ]; then - searchAlbum - fi -fi + 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 if [ "$option" -eq 1 ]; then downloadTrack elif [ "$option" -eq 2 ]; then @@ -388,4 +326,4 @@ fi elif [ "$option" -eq 3 ]; then searchAlbum fi -fi \ No newline at end of file +fi diff --git a/src/tidler.conf b/src/tidler.conf index 49e42d4..676c976 100644 --- a/src/tidler.conf +++ b/src/tidler.conf @@ -12,4 +12,4 @@ QUALITY="LOSSLESS" COVER_RESOLUTION="1280" # If there is any problem with the API, Tidler will attempt to download the track again -> possible values are "1" to "100" -MAX_ATTEMPTS="15" +MAX_ATTEMPTS="10"