about summary refs log tree commit diff stats
path: root/pkgs/by-name/sp/spodi/sh/update.sh
blob: a289cf5816f0df7f1b0d37ab8e76fe9b0201f388 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/env dash

update() {
    UPDATE_DIRECTORY="%XDG_MUSIC_DIR/artists"
    UPDATE_CONFIG_FILE="%XDG_MUSIC_DIR/artists/update.conf"

    if ! [ -f "$UPDATE_CONFIG_FILE" ]; then
        error="$(
            cat <<EOF
Please provide an update config file at: '$UPDATE_CONFIG_FILE'.

The 'update.conf' file should follow this pattern:
<path_to_artist>/<artist_name>|<spotify_url>

All comments and empty lines are ignored
EOF
        )"
        die "$error"
    fi

    config_file="$(mktmp)"
    clean "$UPDATE_CONFIG_FILE" >"$config_file"

    while IFS="|" read -r artist url; do
        full_artist="$UPDATE_DIRECTORY/$artist"
        [ -d "$full_artist" ] || mkdir --parents "$full_artist"
        [ -d "$full_artist/update" ] || mkdir --parents "$full_artist/update"
        [ -d "$full_artist/all" ] || mkdir --parents "$full_artist/all"
        [ -d "$full_artist/filtered" ] || mkdir --parents "$full_artist/filtered"

        while read -r file; do
            ln --symbolic --relative "$file" "$full_artist/update/$(basename "$file")"
        done <"$(tmp fd --type file --extension opus . "$full_artist/all")"

        msg2 "Updating $artist with url: '$url'"
        download "$url" "$full_artist/update"

        while read -r file; do
            mv "$file" "$full_artist/all"
            ln --symbolic --relative "$full_artist/all/$(basename "$file")" "$full_artist/filtered/$(basename "$file")"
        done <"$(tmp fd --type file --extension opus . "$full_artist/update")"

        while read -r file; do
            rm "$file"
        done <"$(tmp fd --type symlink --extension opus . "$full_artist/update")"

        cp "$full_artist/update/spotdl.log" "$full_artist/all/spotdl.$(date +%Y_%m_%d).log"
        cp "$full_artist/update/spotdl-errors.log" "$full_artist/all/spotdl-errors.$(date +%Y_%m_%d).log"
    done <"$config_file"
}

# vim: ft=sh