Skip to content

Commit 138d53b

Browse files
committed
refactor in single script
1 parent 69e650d commit 138d53b

3 files changed

Lines changed: 107 additions & 84 deletions

File tree

bin/collection_manage.sh

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
#!/bin/bash
2+
source "$HOME/.config/scripts/settings.sh"
3+
4+
declare -A FLAGS
5+
FLAGS[a]='AUDIO_ONLY="-x -f bestaudio"'
6+
FLAGS[c]='SUBS=--embed-subs'
7+
FLAGS[u]='URL=${OPTARG}'
8+
FLAGS[f]='FORMAT="-f "${OPTARG}'
9+
FLAGS[d]='DEST_FOLDER=${OPTARG}'
10+
FLAGS[l]='LINKS_FILE=${OPTARG}'
11+
FLAGS[D]='DEBUG=1'
12+
FLAGS_STRING='acf:u:d:l:D'
13+
14+
declare -A COMMANDS
15+
COMMANDS[dwl]="download content"
16+
COMMANDS[nv_album]="download audio files from youtube links"
17+
COMMANDS[all_lyrics]="download lyrics from lrclib.net"
18+
19+
# constants
20+
COLLECTION_DIR="$HOME/collection"
21+
BASEURL="https://lrclib.net/api/get?"
22+
LOG_DIR="$SCRIPTS_LOGS_FOLDER/$(basename $0 .sh)"; if test ! -d $LOG_DIR;then mkdir "$LOG_DIR";fi
23+
NOW="$(date +%s)"
24+
YT_DLP_PROGRESS_FILE='/tmp/progress.txt'
25+
NV_ALBUM_DIR="/tmp/nv_album"
26+
27+
function dwl() {
28+
if [[ -z $DEST_FOLDER ]] || [[ -z $URL ]]; then help; exit 1; fi
29+
# setting yt-dlp command
30+
YT_DLP_CMD="yt-dlp \
31+
--ignore-errors \
32+
--continue \
33+
--no-overwrites \
34+
--download-archive $YT_DLP_PROGRESS_FILE \
35+
${AUDIO_ONLY} \
36+
${SUBS} \
37+
${FORMAT} \
38+
-P $DEST_FOLDER \
39+
$URL"
40+
41+
# printing command for debugging purposes
42+
if [[ "$DEBUG" == "1" ]]; then echo "running $YT_DLP_CMD"; fi
43+
44+
# run command
45+
$YT_DLP_CMD
46+
47+
# remove progress file
48+
rm -f "$YT_DLP_PROGRESS_FILE"
49+
}
50+
51+
function nv_album(){
52+
53+
if [[ -n $LINKS_FILE ]]; then
54+
cat "$LINKS_FILE" | while read link; do
55+
echo "downloading $link"
56+
($0 dwl -a -d $NV_ALBUM_DIR -u "$link")
57+
done
58+
elif [[ -n $URL ]]; then
59+
($0 dwl -a -d $NV_ALBUM_DIR -u "$URL")
60+
fi
61+
62+
}
63+
64+
function all_lyrics(){
65+
# loop all music files in collection
66+
find "$COLLECTION_DIR" -regextype posix-egrep -regex ".*\.(m4a|opus|wav)$" | while read file; do
67+
lyrics "$file"
68+
done
69+
}
70+
71+
function lyrics(){
72+
# test if a lyrics file is already downloaded
73+
if test ! -f "${file%.*}.lrc" && test ! -f "${file%.*}.txt"; then
74+
75+
echo "processing: $file" | tee -a "$LOG_DIR/log-$NOW"
76+
77+
# reading metadata from file
78+
metadata="$(ffprobe -show_entries 'stream_tags : format_tags' "$file" 2>/dev/null)"
79+
album="$(echo "$metadata" | grep -i 'TAG:album=' | awk -F'=' '{$1="";print $0}' | awk '{$1=$1;print}')";
80+
title="$(echo "$metadata" | grep -i 'TAG:title=' | awk -F'=' '{$1="";print $0}' | awk '{$1=$1;print}')";
81+
artist="$(echo "$metadata" | grep -i 'TAG:artist=' | awk -F'=' '{$1="";print $0}' | awk '{$1=$1;print}')";
82+
83+
# encoding url with parameter
84+
url_encoded="${BASEURL}artist_name=$(printf "$artist" | jq --slurp --raw-input --raw-output @uri )&track_name=$(printf "$title" | jq --slurp --raw-input --raw-output @uri )&album_name=$(printf "$album" | jq --slurp --raw-input --raw-output @uri)"
85+
86+
echo "librc url: $url_encoded" | tee -a "$LOG_DIR/log-$NOW"
87+
88+
# retrieve plain and synced lyrics from lrclib.net
89+
api_response="$(curl "$url_encoded")"
90+
echo "api response: $api_response" | tee -a "$LOG_DIR/log-$NOW"
91+
92+
synced_lyrics=$(echo "$api_response" | jq '.syncedLyrics' -r)
93+
plain_lyrics=$(echo "$api_response" | jq '.plainLyrics' -r)
94+
95+
# check if synced lyrics exists and print to file, use plain lyrics as fallback
96+
if [[ "$synced_lyrics" != 'null' ]];then
97+
echo "writing synced lyrics in ${file%.*}.lrc" | tee -a "$LOG_DIR/log-$NOW"
98+
echo "$synced_lyrics" > "${file%.*}.lrc"
99+
elif [[ "$plain_lyrics" != 'null' ]];then
100+
echo "writing plain lyrics in ${file%.*}.txt" | tee -a "$LOG_DIR/log-$NOW"
101+
echo "$plain_lyrics" > "${file%.*}.txt"
102+
fi
103+
104+
fi
105+
}
106+
107+
source "$SCRIPTS_LIB_FOLDER/cli.sh"

bin/download_lyrics.sh

Lines changed: 0 additions & 32 deletions
This file was deleted.

bin/yt-downloader.sh

Lines changed: 0 additions & 52 deletions
This file was deleted.

0 commit comments

Comments
 (0)