#!/bin/bash

#************************************************#
#            PlayListMPDGenerator                #
#               écrit par WW                     #
#        dim 22 fév 2009 18:42:29 CET            #
#                                                #
#      Génération de playlists pour mpd          #
#************************************************#

# Liste des formats supportés par MPD
listeFormats="*.mp3 *.mp2 *.ogg *.flac *.wav *.au *.aiff *.aif *.m4a *.mp4 *.mpc *.amf *.dsm *.far *.gdm *.imf *.it *.med *.mod *.mtm *.s3m *.stm *.stx *.ult *.uni *.xm"

# Fichier temporaire pour parcourir le résultat de ls
listingRep="$HOME/.PlayListMPDGenerator"

# Dossier dans lequel mpd cherche les playlists
playlistsMPD=`cat $HOME/.mpdconf | grep "playlist_directory"`
playlistsMPD=`expr "$playlistsMPD" : '.*"\(.*\)"'`

# Dossier dans lequel mpd cherche la musique
music=`cat $HOME/.mpdconf | grep "music_directory"`
music=`expr "$music" : '.*"\(.*\)"'`

# traitementRepertoire prend un argument le répertoire à traiter
traitementRepertoire() {
    sousDossier="false"

    if [ "$1" = "" ]; then
        chemin=""
    else if [ "$chemin" = "" ]; then
            chemin="$1/"
        else
            chemin="$chemin$1/"
        fi
    fi

    for i in $listeFormats; do
        if [ "${i%.*}" != "*" ]; then
            echo "$chemin$i" >> "$playlistsMPD/$1.m3u"
        fi
    done

    ls > $listingRep
    cat $listingRep |   # On parcours les sous-dossiers
    while read repertoire; do
        if [ -d "$repertoire" ]; then
            sousDossier="true"
            cd "$repertoire"

            traitementRepertoire "$repertoire"

            # Création d'une playlist générale pour $1 #
            if [ -e "$playlistsMPD/$repertoire.m3u" ]; then            
                cat "$playlistsMPD/$repertoire.m3u" >> "$playlistsMPD/all_$1.m3u"
            fi

            cd ..
            chemin=`expr "$chemin" : '\(.*/\).*/'` # chemin = tous ce qui se trouve avant l'avant-dernier "/" (avant-dernier "/" compris)
        fi
    done

    if [ "$sousDossier" = "true" ]; then
        cat "$playlistsMPD/$1.m3u" >> "$playlistsMPD/all_$1.m3u" # Création de la playlist générale du répertoire courant ($1)
    fi

    if [ -e "$playlistsMPD/all_$1.m3u" ]; then
        cat "$playlistsMPD/all_$1.m3u" >> "$playlistsMPD/all.m3u" # Ajout d'élements dans la playlist générale de @
    fi
}

#~ Programme ~#
echo "Voulez vous supprimer les anciennes playlist du dossier $playlistsMPD ? (O\n)"
read reponse
if [ "$reponse" = "O" -o "$reponse" = "Oui" -o "$reponse" = "o" -o "$reponse" = "oui" -o "$reponse" = "" ]; then
    rm $playlistsMPD/*.m3u
fi

if [ -e "$playlistsMPD/all.m3u" ]; then
    rm "$playlistsMPD/all.m3u" # Suppression de la playlist générale, elle est recréée pour inclure les nouveaux éléments
fi

cd $music

traitementRepertoire ""

if [ -e "$playlistsMPD/.m3u" ]; then
    mv "$playlistsMPD/.m3u" "$playlistsMPD/Non-Classé.m3u" # La première playlist créée est celle des morceaux non classé à la racine
fi
mv "$playlistsMPD/all_.m3u" "$playlistsMPD/tout_sans_les_non-classés.m3u"
rm $listingRep
echo "Génération des playlists effectuée"
