Et voilà ma version du code, utilisant zenity :
#!/bin/bash
#
##########################
## Auteur : 06011988 ##
## Version: 2.0 ##
## Licence: GNU ##
##########################
#
# Clé d'utilisation de genpuid (Fourni par Musicdns.com)
key=3839dbda127e29ccd213da2be833b756
#Conversion dans le tmp
mkdir -p /tmp/conv
#Fonctions
function fenetre_genre()
{
GENRE=$(zenity --entry --title="Genre" --text="Veuillez indiquer le genre" \
"Blues"\
"A Capella"\
"Acid"\
"Acid Punk"\
"Acoustic"\
"Alternative"\
"AlternRock"\
"Ambient"\
"Anime"\
"Avantgarde"\
"Ballad"\
"Bass"\
"Beat"\
"Bebob"\
"Big Band"\
"Black Metal"\
"Bluegrass"\
"Booty Bass"\
"BritPop"\
"Cabaret"\
"Celtic"\
"Chamber Music"\
"Chanson"\
"Chorus"\
"Christian Gangsta Rap"\
"Christian Rap"\
"Christian Rock"\
"Classic Rock"\
"Classical"\
"Club"\
"Club-House"\
"Comedy"\
"Contemporary Christian"\
"Country"\
"Crossover"\
"Cult"\
"Dance"\
"Dance Hall"\
"Darkwave"\
"Death Metal"\
"Disco"\
"Dream"\
"Drum & Bass"\
"Drum Solo"\
"Duet"\
"Easy Listening"\
"Electronic"\
"Ethnic"\
"Euro-House"\
"Euro-Techno"\
"Eurodance"\
"Fast Fusion"\
"Folk"\
"Folk-Rock"\
"Folklore"\
"Freestyle"\
"Funk"\
"Fusion"\
"Game"\
"Gangsta Rap"\
"Goa"\
"Gospel"\
"Gothic"\
"Gothic Rock"\
"Grunge"\
"Hard Rock"\
"Hardcore"\
"Heavy Metal"\
"Hip-Hop"\
"House"\
"Humour"\
"Indie"\
"Industrial"\
"Instrumental"\
"Instrumental Pop"\
"Instrumental Rock"\
"Jazz"\
"Jazz+Funk"\
"JPop"\
"Jungle"\
"Latin"\
"Lo-Fi"\
"Meditative"\
"Merengue"\
"Metal"\
"Musical"\
"National Folk"\
"Native American"\
"Negerpunk"\
"New Age"\
"New Wave"\
"Noise"\
"Oldies"\
"Opera"\
"Other"\
"Polka"\
"Polsk Punk"\
"Pop"\
"Pop / Funk"\
"Pop-Folk"\
"Porn Groove"\
"Power Ballad"\
"Pranks"\
"Primus"\
"Progressive Rock"\
"Psychedelic"\
"Psychedelic Rock"\
"Punk"\
"Punk Rock"\
"R&B"\
"Rap"\
"Rave"\
"Reggae"\
"Retro"\
"Revival"\
"Rhythmic Soul"\
"Rock"\
"Rock & Roll"\
"Rock/Pop"\
"Salsa"\
"Samba"\
"Satire"\
"Showtunes"\
"Ska"\
"Slow Jam"\
"Slow Rock"\
"Sonata"\
"Soul"\
"Sound Clip"\
"Soundtrack"\
"Southern Rock"\
"Space"\
"Speech"\
"Swing"\
"Symphonic Rock"\
"Symphony"\
"Synthpop"\
"Tango"\
"Techno"\
"Techno-Industrial"\
"Terror"\
"Thrash Metal"\
"Top 40"\
"Trailer"\
"Trance"\
"Tribal"\
"Trip-Hop"\
"Vocal")
}
function fenetre_dossier()
{
FILE_DIRECTORY=$(zenity --file-selection --directory --title="Sélectionnez le dossier de destination")
}
function fenetre_trie()
{
TRIE=$((echo -e \
"1\nArtist/
2\nAlbum/
3\nGenre/
4\nArtiste/Album/
5\nArtiste/Genre/
6\nGenre/Artiste/
7\nGenre/Album/
8\nGenre/Artiste/Album/
9\nAucun") | zenity --list --column="id" --hide-column=1 --column="Paramètre de rangement" --height=330 --title="Organisation des dossiers" --text="Veuillez choisir une configuration")
}
function fenetre_nom()
{
NOM=$((echo -e \
"1\ntitre
2\ntrack - titre
3\nartist - titre
4\nalbum - titre
5\ntrack - artist - titre
6\ntrack - album - titre
7\nartist - album - titre
8\ntrack - artist - album - titre") | zenity --list --column="id" --hide-column=1 --column="Paramètre du nom du mp3" --height=310 --title="Configuration du nom de fichier" --text="Veuillez choisir une configuration")
}
#Gestion des arguments
declare -i i
config=false
dir=""
for i in `seq 0 $#`
do
if [ ${!i} = "-d" ]
then
i=$i+1
dir=${!i}
echo "dir = ${!i}"
if [ ! -d $dir ]
then
echo "$dir va être créé"
mkdir -p $dir
if [ ! -d $dir ]
then
echo "$dir n'a pas pu être créé"
exit 0
fi
fi
fi
if [ ${!i} = "--config" ]
then
config=true
fi
done
#Vérifie l'existence du fichier de conf
test -e ~/.T1000-tag
CONFIG=$?
if [ "$CONFIG" = "1" ]; then
{
zenity --warning --title="Attention" --text="Aucun fichier de configuration.\n La configuration va être lancée."
config=true
}
#fichier de conf présent test de son intégrité
else
{
VARIABLES=$(cat ~/.T1000-tag)
eval $VARIABLES
#Test_dir=$Chemin
#Test_trie=$Trie
#Test_nom=$Nom
ERROR=false;
if [ -d "$Chemin" ]; then
{
echo "config DIR = $Chemin OK"
}
else
{
echo "config DIR = $Chemin ERROR"
ERROR=true
}
fi
if [ "$Trie" = "9" ] || [ "$Trie" = "8" ] || [ "$Trie" = "7" ] || [ "$Trie" = "6" ] || [ "$Trie" = "5" ] || [ "$Trie" = "4" ] || [ "$Trie" = "3" ] || [ "$Trie" = "2" ] || [ "$Trie" = "1" ]; then
{
echo "config TRIE = $Trie OK"
}
else
{
echo "config TRIE = $Trie ERROR"
ERROR=true
}
fi
if [ "$Nom" = "8" ] || [ "$Nom" = "7" ] || [ "$Nom" = "6" ] || [ "$Nom" = "5" ] || [ "$Nom" = "4" ] || [ "$Nom" = "3" ] || [ "$Nom" = "2" ] || [ "$Nom" = "1" ]; then
{
echo "config NOM = $Nom OK"
}
else
{
echo "config NOM = $Nom ERROR"
ERROR=true
}
fi
if [ $ERROR = true ]; then
zenity --warning --title="Attention" --text="Fichier de configuration erroné!"
config=true
fi
}
fi
if [ $config = true ]; then
{
fenetre_dossier
fenetre_trie
fenetre_nom
#Création du fichier de configuration
echo "Chemin=$FILE_DIRECTORY"
echo "Chemin=$FILE_DIRECTORY">~/.T1000-tag
echo -n "Trie="
echo "$TRIE" | cut -c2
echo -n "Trie=">>~/.T1000-tag
echo "$TRIE" | cut -c2>>~/.T1000-tag
echo -n "Nom="
echo "$NOM" | cut -c2
echo -n "Nom=">>~/.T1000-tag
echo "$NOM" | cut -c2>>~/.T1000-tag
exit 0
}
fi
# Fichier chargé complètement?
zenity --warning --text="Merci de lancer le chargement de la musique avant de continuer T1000-tag" --title="Attention"
### Sélection du dernier fichier flv présent dans /tmp/
file=$(ls -lt /tmp/Flash* | cut -d " " -f8 | head -n1)
# OK
if [ "$?" = 0 ]; then
{
##Fichier existant ?
if [ -e "$file" ]; then
{
### Chargement du fichier test
(echo 10;
echo "# Attente de la fin du téléchargement"
var=$(ls -lt /tmp/Flash* | cut -d " " -f5 | head -n1);
(
until [ "$var" = "$var1" ]
do
var1=$var
sleep 2
var=$(ls -lt /tmp/Flash* | cut -d " " -f5 | head -n1)
done
);
echo 33.3333;
### Copie du fichier de /tmp a /home/MP3/
echo "# Copie du fichier"
cp $file /tmp/conv/conv.flv
echo 45;
### Conversion FLV->MP3
echo "# Conversion du fichier"
mplayer -dumpaudio -dumpfile /tmp/conv/conv.mp3 /tmp/conv/conv.flv
echo 60;
### supression du flv
echo "# Suppression du vieux fichier"
rm -f /tmp/conv/conv.flv
### Tag
echo 65;
#### Génération du PUID du mp3
echo "# Génération de l'empreinte audio"
PUID=$(genpuid $key /tmp/conv/conv.mp3 | grep " puid: " | sed -e "s/.*puid: //")
echo 80;
#### Récupération des tags avec Musicbrainz©
echo"# Récupération des tags sur Musicbrainz©"
wget -O /tmp/conv/.PUID http://musicbrainz.org/show/puid/?puid=$PUID
#### Vérification des tags
echo 100;) | zenity --progress \
--title="Récupération du fichier musical" \
--text="Veuillez patienter..." \
--percentage=0 \
--auto-close
verif=$(cat /tmp/conv/.PUID | grep "This <" | sed -e 's/.*<strong>//' | sed -e 's/<\/strong>.*//')
if [ "$verif" = "PUID" ]; then
{
##### Tag non trouvé sur Musicbrainz©
mbartist=""
mbalbum=""
mbtitre=""
mbtrack=0
} else {
##### Tag trouvé sur Musicbrainz©
##### Définition des variables
mbartist=$(cat /tmp/conv/.PUID | grep "<table class=\"artisttitle\">" | sed -e 's/.*artist page">//g' | sed -e 's/<\/a.*//' | sed -e "s/'/'/g" | head -n1 | sed -e 's/\//-/g')
mbalbum=$(cat /tmp/conv/.PUID | grep "/release/" | sed -e 's/.*">//g' | sed -e 's/<\/a.*//' | sed -e "s/'/'/g" | head -n1 | sed -e 's/\//-/g')
mbtitre=$(cat /tmp/conv/.PUID | grep "/track/" | sed -e 's/.*">//g' | sed -e 's/<\/a.*//' | sed -e "s/'/'/g" | head -n1 | sed -e 's/\//-/g')
mbtrack=$(cat /tmp/conv/.PUID | grep "no\">" | sed -e 's/.*">//g' | sed -e 's/<\/t.*//' | sed -e "s/'/'/g" | head -n1 | sed -e 's/\//-/g')
##### Affichage des Tags trouvés
}
fi
VARIABLES=`(echo -e "ARTIST=\"$mbartist\"\nALBUM=\"$mbalbum\"\nTITLE=\"$mbtitre\"\nTRACK=$mbtrack\n") | zenity --text-info --title='Édition des tags' --editable --width='550' --height='500'`
eval $VARIABLES
##### Vérification des Tags
fenetre_genre #définition du Genre (pas donné par Musicbrainz©)
eyeD3 -a "$ARTIST" -A "$ALBUM" -t "$TITLE" -G "$GENRE" -n "$TRACK" /tmp/conv/conv.mp3
### Suppression du fichier .PUID
rm -f /tmp/conv/.PUID
### Extraction des variables (ruse sioux)
eyeD3 --rename="%Asupr1%asupr2%tsupr3%n" /tmp/conv/conv.mp3
### Définition des variables
MOVE=$(ls -lt /tmp/conv/*.mp3 | head -n1 | sed -e 's/.*tmp\/conv\///')
### Récupération des paramètres
if [ ! $dir = "" ];then
Chemin=$dir
fi
### Création des dossiers selon la configuration
case "$Trie" in
1 ) dir2="$Chemin/$ARTIST/";;
2 ) dir2="$Chemin/$ALBUM/";;
3 ) dir2="$Chemin/$GENRE/";;
4 ) dir2="$Chemin/$ARTIST/$ALBUM/";;
5 ) dir2="$Chemin/$ARTIST/$GENRE/";;
6 ) dir2="$Chemin/$GENRE/$ARTIST/";;
7 ) dir2="$Chemin/$GENRE/$ALBUM/";;
8 ) dir2="$Chemin/$GENRE/$ARTIST/$ALBUM/";;
9 ) dir2="$Chemin/";;
esac
mkdir -p "$dir2"
### Déplacement du mp3 dans le dossier selon la configuration
case "$Nom" in
1 ) move2="$TITLE.mp3";;
2 ) move2="$TRACK-$TITLE.mp3";;
3 ) move2="$ARTIST-$TITLE.mp3";;
4 ) move2="$ALBUM-$TITLE.mp3";;
5 ) move2="$TRACK-$ARTIST-$TITLE.mp3";;
6 ) move2="$TRACK-$ALBUM-$TITLE.mp3";;
7 ) move2="$ARTIST-$ALBUM-$TITLE.mp3";;
8 ) move2="$TRACK-$ARTIST-$ALBUM-$TITLE.mp3";;
esac
mv /tmp/conv/"$MOVE" "$dir2""$move2"
zenity --info --title="Programme terminé" --text="Toutes les opérations ont été effectuées avec succès la musique a été rangée dans : $dir2$move2"
}
else
{
zenity --error --title="Erreur" text="Une erreur est survenue"
}
fi
}
fi
exit 0
J'ai enlevé CDDB (trop long à utiliser), j'ai fusionner la recherche sur music brainz et l'édition des tags.
L'option -d est toujours possible pour spécifier un dossier différent de la config.
L'option --config permet de configurer.
S'il ne trouve pas de fichier de config ou s'il est cassé, ça lance la config aussi.
J'ai aussi mis une barre de progression en état de marche pour les étapes intermédiaires. (qui se ferme automatiquement sans un sale "killall gtkdialog" )
[EDIT]j'ai mis à jour, pour virer les dernier appel restant à gtkdialog et ajouter la détection si on ferme la première fenêtre, le programme se quitte au lieu de se lancer. (il faut appuyer sur valider pour le lancer)