#!/usr/bin/sh

radio_dir=/mnt/data/appdata/radio

case $1 in
    f | filelist)
        tree -H '' -T "Arav's dwelling / Radio / List" \
            -P '*.ogg' --charset=utf-8 --prune --du -hnl \
            --nolinks -o $radio_dir/filelist.html $radio_dir/music
        break
        ;;
    p | playlist)
        find -L $radio_dir/music/* -type f -iname '*.ogg' |
            cut -c 31- | sort -d > $radio_dir/playlists/all
        break
        ;;
    ep | ez-playlist)
        find -L $radio_dir/music/* -type f -iname '*.ogg' |
            sort -d > $radio_dir/playlists/all
        break
        ;;
    s | shuffle)
        shuf $radio_dir/playlists/all > $radio_dir/playlists/all-rand
        break
        ;;
    c | convert)
        for file in "$2"/*; do
            if [[ "$file" == *.ogg ]]; then
                continue;
            fi
            if [ -f "${file%.*}.ogg" ]; then
                continue;
            fi
            ffmpeg -hide_banner -i "$file" -y -vn -c:a libvorbis -b:a 128k "${file%.*}.ogg";
            if [ $? -eq 0 ] && [ $3 = "del" ]; then
                rm "$file";
            fi
        done
        break
        ;;
    d | duration)
        find $radio_dir/music -iname '*.ogg' -exec ffprobe -i "{}" \
            -show_entries format=duration -v quiet -of csv="p=0" \; |
            paste -s -d+ - | bc
        break
        ;;
    er | ez-reload)
        pkill -HUP ezstream
        break
        ;;
    dr | dw-reload)
        pkill -HUP dwelling-radio
        break
        ;;
    *)
        echo "f|ilelist - to generate a filelist.html"
        echo "p|laylist - to generate a playlist 'all'"
        echo "ep|ez-playlist- - to generate a playlist 'all' with full paths"
        echo "s|huffle - to shuffle a playlist and store as all-rand"
        echo "c|onvert DIR - convert all files in DIR to ogg"
        echo "d|uration - get total songs' duration"
        echo "er|ez-reload - send SIGHUP to ezstream to reload a playlist"
        echo "dr|dw-reload - send SIGHUP to dwelling-radio to reload a playlist"
        exit
        ;;
esac