#!/bin/bash

#************************************************#
#             PlayListGenerator                  #
#               écrit par WW                     #
#         sam 21 mar 2009 19:11:13 CET           #
#                                                #
#   Génération de playlists au format m3u        #
#************************************************#

# Liste des formats : ajouter ceux supportés par le lecteur que vous utilisez
listeFormats="*.mp3 *.ogg *.flac *.wav"

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

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

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

    for i in $listeFormats; do
        if [ "${i%.*}" != "*" ]; then
            echo "$chemin$i" >> "$playlists/$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 "$playlists/$repertoire.m3u" ]; then            
                cat "$playlists/$repertoire.m3u" >> "$playlists/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 "$playlists/$1.m3u" >> "$playlists/all_$1.m3u" # Création de la playlist générale du répertoire courant ($1)
    fi

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

#~ Programme ~#

if [ $# != 1 -a $# != 2 -o "$1" = "-h" ]; then
	echo -e "-------> PlayListGenerator : <-------\n"
	echo -e "Ce script permet de générer des playlists m3u.\n"
	echo "Usage : $0 <dossier musical> [dossier des playlists]"
	echo -e "        $0 [options]\n"
    echo "Si le second argument est omis les playlists"
    echo -e "sont générées dans le répertoire ~/Playlists.\n"
	echo "Options :"
	echo -e "  -h\tAffiche cette mini-aide"
	exit 0;
fi

creation=1

if [ $# = 2 ]; then
    if [ ! -d "$2" ]; then creation=0; mkdir "$2"; fi
    playlists="$2"
else
    if [ ! -d "$HOME/Playlists" ]; then creation=0; mkdir "$HOME/Playlists"; fi
    playlists="$HOME/Playlists"
fi

# Dossier où se trouve votre musique
music="$1"

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

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