Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
utilisateurs:kamui57:guimp3report [Le 25/08/2010, 13:28] kamui57utilisateurs:kamui57:guimp3report [Le 25/08/2010, 14:40] (Version actuelle) kamui57
Ligne 1: Ligne 1:
 +====== GUI pour mp3report ======
  
 +
 +<note warning>
 +Ce script ne fonctionne pas encore, merci de ne pas l'utiliser.
 +</note>
 +
 +===== Captures d'écran =====
 +     * Le script commence par vérifier les dépendances (zenity et mp3report). Si au moins l'une d'elles manque, il affiche une fenêtre d'erreur et s'arrête.
 +
 +{{http://nsm04.casimages.com/img/2010/08/25//10082501585425326627787.jpg|Dépendance manquante}}
 +
 +    * Ensuite, la boîte de dialogue permettant de choisir les options grâce à des cases à cocher s'affiche. Les options "title", "outfile" et "template" ont besoin d'un paramètre, les autres non.
 +    
 +{{http://nsm04.casimages.com/img/2010/08/25/10082501585325326627786.jpg|Boîte de dialogue de choix des options}}
 +
 +    * Si l'on a choisi l'option "title", qui nécessite l'entrée du titre, une boîte de dialogue s'affiche nous invitant à le rentrer.
 +    
 +{{http://nsm04.casimages.com/img/2010/08/25/10082501585125326627783.jpg|Boîte de dialogue d'entrée du titre}}
 +
 +    * Dans ce cas, si l'on rentre un titre vide, on est averti que cette option ne sera finalement pas prise en compte.
 +    
 +{{http://nsm04.casimages.com/img/2010/08/25/10082501585125326627784.jpg|Titre vide donc option "title" ignorée}}
 +
 +    * Si l'on a choisi l'option "outfile", qui nécessite l'entrée du fichier de sortie, une boîte de dialogue s'affiche nous demandant si l'on veut le rapport sur la sortie standard ou dans un fichier.
 +    
 +{{http://nsm04.casimages.com/img/2010/08/25/10082501585025326627781.jpg|Sortie standard ou fichier ?}}
 +
 +    * Dans ce dernier cas (fichier), une boîte de dialogue nous invite alors à le choisir.
 +    
 +{{http://nsm04.casimages.com/img/2010/08/25/10082502374925326627965.jpg|Choix du fichier de sortie}}
 +
 +    * Si l'on clique sur "Annuler", on est prévenu que l'option ne sera pas retenue.
 +    
 +{{http://nsm04.casimages.com/img/2010/08/25/10082501584725326627779.jpg|Fichier de sortie vide donc option "outfile" ignorée}}
 +
 +    * Si l'on a choisi l'option "template", qui nécessite l'entrée du fichier template, une boîte de dialogue s'affiche nous prévenant que l'on va devoir le choisir.
 +    
 +{{http://nsm04.casimages.com/img/2010/08/25/10082501584425326627776.jpg|Choix du template imminent}}
 +
 +    * C'est ce que la fenêtre suivante propose. C'est une fenêtre de même type que celle pour le fichier de sortie.
 +
 +    * Si l'on clique sur "Annuler", on est prévenu que l'option ne sera pas retenue.
 +    
 +{{http://nsm04.casimages.com/img/2010/08/25/10082501584525326627777.jpg|Fichier vide donc option "template" ignorée}}
 +
 +    * Dernière étape, le choix du/des répertoires à scanner, précédé encore une fois par une fenêtre d'information.
 +    
 +{{http://nsm04.casimages.com/img/2010/08/25/10082501584125326627773.jpg|Choix des répertoires imminent}}
 +
 +    * Le choix des répertoires est proposé.
 +    
 +{{http://nsm04.casimages.com/img/2010/08/25/10082502374825326627964.jpg|Choix des répertoires}}
 +
 +    * Si l'utilisateur clique sur "annuler", le script s'arrête.
 +    
 +{{http://nsm04.casimages.com/img/2010/08/25/10082501584225326627774.jpg|Aucun répertoire choisi, fin du script}}
 +
 +===== Fichiers =====
 +Ce script a pour but de donner une interface graphique à mp3report. Il est composé de plusieurs fichiers :
 +     * GUImp3report.bash : script principal
 +     * controldependencies.bash : contrôle de la présence de zenity et mp3report
 +     * init.bash : initialisation des variables
 +     * chooseoptions.bash : boite de choix des options (cases à cocher)
 +     * chooseparameters.bash : choix des paramètres pour les options cochées qui en demandent
 +     * choosedirectories.bash : choix des répertoires à scanner
 +     * buildcommandline.bash : construction de la commande à exécuter
 +     * executecommand.bash : confirmation de l'exactitude de la commande par l'utilisateur et exécution
 +
 +==== GUImp3report.bash ====
 +<code bash>#!/bin/bash
 +
 +################################################################
 +# Asks for the options and parameters for the "mp3report       #
 +# command and executes it, all this in a gui (zenity)          #
 +#                                                              #
 +# Auteur : kamui57 < kamui_57 AT yahoo DOT fr >                #
 +#                                                              #
 +# Licence : Ce script est un logiciel libre ; vous pouvez le   #
 +# redistribuer et/ou le modifier selon les termes de la        #
 +# Licence Publique Générale GNU ( GNU GPL ) publiée par la Free#
 +# Software Foundation.                                         #
 +################################################################
 +
 +source $HOME/controldependencies.bash
 +
 +source $HOME/init.bash
 +
 +source $HOME/chooseoptions.bash
 +
 +if [ "$chosen" != "" ]
 +then
 +    source $HOME/chooseparameters.bash
 +fi
 +
 +source $HOME/choosedirectories.bash
 +
 +source $HOME/buildcommandline.bash
 +
 +source $HOME/executecommand.bash
 +# help for zenity found here
 +# http://linux.byexamples.com/archives/259/a-complete-zenity-dialog-examples-1/
 +
 +</code>
 +
 +==== controldependencies.bash ====
 +<code bash>#!/bin/bash
 +
 +################################################################
 +# Control that the required dependencies zenity and mp3report  #
 +#  are present.                                                #
 +#                                                              #
 +# Auteur : kamui57 < kamui_57 AT yahoo DOT fr >                #
 +#                                                              #
 +# Licence : Ce script est un logiciel libre ; vous pouvez le   #
 +# redistribuer et/ou le modifier selon les termes de la        #
 +# Licence Publique Générale GNU ( GNU GPL ) publiée par la Free#
 +# Software Foundation.                                         #
 +#                                                              #
 +################################################################
 +
 +error=""
 +missing=0
 +#zenitymissing=0
 +#mp3reportmissing=0
 +# control if the required dependencies are present
 +if [[ !  `which zenity` ]]
 +then 
 +    missing=1
 +    error="${error}The required dependency \"zenity\" is missing.\n"
 +fi
 +
 +if [[ !  `which mp3report` ]]
 +then 
 +    missing=1
 +    error="${error}The required dependency \"mp3report\" is missing.\n"
 +fi
 +
 +# if not display an error message and exit
 +if [ $missing -eq 1 ]
 +then
 +  zenity --error --text "${error}\nPlease install the required dependencies and run the script again. "
 +  exit
 +fi</code>
 +
 +==== init.bash ====
 +<code bash>#!/bin/bash
 +
 +################################################################
 +# Initialises some variables for the script :                  #
 +# - the list of available options                              #
 +# - the titles of the columns for the "choose options" box     #
 +# - the text for the "choose options" box                      #
 +# - the separator for the list of the chosen options           #
 +# - the chosen state of each option                            #
 +#                                                              #
 +# Auteur : kamui57 < kamui_57 AT yahoo DOT fr >                #
 +#                                                              #
 +# Licence : Ce script est un logiciel libre ; vous pouvez le   #
 +# redistribuer et/ou le modifier selon les termes de la        #
 +# Licence Publique Générale GNU ( GNU GPL ) publiée par la Free#
 +# Software Foundation.                                         #
 +#                                                              #
 +################################################################
 +
 +# Variables for the options checkboxes
 +# titles
 +titre[0]="Pick"
 +titre[1]="Options"
 +titre[2]="Explanation"
 +# names of the options and brief explanation
 +options[0]="help"
 +explanation[0]="shows the help screen"
 +options[1]="printmode"
 +explanation[1]="uses a smaller font for printing"
 +options[2]="title"
 +explanation[2]="sets the title used in the report"
 +options[3]="outfile"
 +explanation[3]="file to write report to, '-' for STDOUT"
 +options[4]="template"
 +explanation[4]="file to use as report template"
 +options[5]="stdgenres"
 +explanation[5]="use standard genres instead of winamp genres"
 +options[6]="id3v2"
 +explanation[6]="enable id3v2 support (experimental)"
 +
 +# separator of the checked options' list
 +separator=":"
 +# text displayed in the box to choose options
 +texte="Neon Goat MP3 Report Generator v1.0.2
 +Copyright (C) 2000, David Parker, Neon Goat Productions.
 +www.neongoat.com - david@neongoat.com
 +
 +This script lets you choose the options, the parameters and the directories
 +Please choose the options you want to use."
 +
 +# initialisation of the chosen state of each option
 +# default : no option is chosen
 +for index in "${!options[@]}"
 + do
 +    picked[$index]=FALSE;
 +done  
 +</code>
 +
 +==== chooseoptions.bash ====
 +<code bash>#!/bin/bash
 +
 +################################################################
 +# Displays a zenity box to choose the options to use for       #
 +# mp3report and stores the obtained list in the string named   #
 +# "chosen"                                                     #
 +#                                                              #
 +# Auteur : kamui57 < kamui_57 AT yahoo DOT fr >                #
 +#                                                              #
 +# Licence : Ce script est un logiciel libre ; vous pouvez le   #
 +# redistribuer et/ou le modifier selon les termes de la        #
 +# Licence Publique Générale GNU ( GNU GPL ) publiée par la Free#
 +# Software Foundation.                                         #
 +################################################################
 +
 +# dialog box
 +ans=$(zenity  --list  --text "$texte" --checklist\
 + --height=400 \
 + --column "${titre[0]}" \
 + --column "${titre[1]}" \
 + --column "${titre[2]}" \
 +FALSE "help" "shows the help screen" \
 +FALSE "printmode" "uses a smaller font for printing" \
 +FALSE "title" "=TITLE sets the title used in the report" \
 +FALSE "outfile" "=OUTFILE file to write report to, '-' for STDOUT" \
 +FALSE "template" "=FILE file to use as report template" \
 +FALSE "stdgenres" "use standard genres instead of winamp genres" \
 +FALSE "id3v2" "enable id3v2 support (experimental)" \
 +--separator=$separator); 
 +
 +if [ "$ans" = "" ]
 +then
 +    chosen=""
 +else
 +# splitting options' list
 +    OLD_IFS="$IFS"
 +    IFS="$separator"
 +    chosen=( $ans )
 +    IFS=$OLD_IFS
 +fi
 +
 +</code>
 +
 +==== chooseparameters.bash ====
 +<code bash>#!/bin/bash
 +
 +################################################################
 +# For each chosen option, if this option requires a parameter, #
 +# prompts the user to choose the corresponding parameter.      #
 +#                                                              #
 +# - For the option "title", asks for the title in an input     #
 +#   text box.                                                  #
 +# - For the option "outputfile", asks first if the output must #
 +#   be on the standard output, if not open a filedialog window #
 +#   to pick the output file.                                   #
 +# - For the option "template", open a file dialog window to    #
 +#   pick the template file.                                    #
 +#                                                              #
 +# Auteur : kamui57 < kamui_57 AT yahoo DOT fr >                #
 +#                                                              #
 +# Licence : Ce script est un logiciel libre ; vous pouvez le   #
 +# redistribuer et/ou le modifier selon les termes de la        #
 +# Licence Publique Générale GNU ( GNU GPL ) publiée par la Free#
 +# Software Foundation.                                         #
 +#                                                              #
 +################################################################
 +
 +indexOptions=0
 +for indexChosen in ${!chosen[@]}; do
 +    chosenFound=0
 +    while [ $chosenFound = 0 ]
 +    do
 +    if [ ${options[$indexOptions]} = ${chosen[$indexChosen]} ]
 +    then
 +        break
 +    else
 +        indexOptions=$(($indexOptions+1))
 +    fi
 +    done
 +    picked[$indexOptions]=TRUE;
 +done  
 +
 +########### option "title" picked ##############
 +if [ ${picked[2]} = "TRUE" ]
 +then
 +    titleInput=$(zenity --entry --text "You have picked the option \"title\". This options requires an argument : the title used in the report. Please enter it here." --entry-text ""); 
 +    if [ "$titleInput" = "" ]
 +    then
 +    zenity --warning \
 +        --text="You have not chosen any title. This option will be ignored."
 +    fi
 +    
 +fi
 +
 +########### option "outputfile" picked ##############
 +if [ ${picked[3]} = "TRUE"
 +then
 +    zenity --title "Choice of the output file" --question --text  "You have picked the option \"outputfile\". Do you want to write on the standard output (yes) or on a file (no)?";
 +    if [ "$?" -eq "0" ] # standard input chosen
 +    then
 +    outfileInput='-';
 +    else #  not to standard input, therefore to a file, which must be chosen
 +    zenity --info \
 +        --text="You have chosen to write report to a file. Please choose the file you want to write the report to."
 +    outfileInput=$(zenity --file-selection --save --confirm-overwrite);
 +    fi
 +    if [ "$outputfileInput" = "" ]
 +    then
 +    zenity --warning \
 +        --text="You have not chosen any output file. This option will be ignored."
 +    fi
 +    
 +fi
 +
 +########### option "template" picked ##############
 +if [ ${picked[4]} = "TRUE" ]
 +then
 +    zenity --info \
 +    --text="You have chosen to specify the template to use. Please choose this file."
 +    templateInput=$(zenity --file-selection);
 +
 +    if [ "$templateInput" = "" ]
 +    then
 +    zenity --warning \
 +        --text="You have not chosen any template. This option will be ignored."
 +    fi
 +fi
 +</code>
 +
 +==== choosedirectories.bash ====
 +<code bash>#!/bin/bash
 +
 +################################################################
 +# Displays a directories selection box to choose the scanned   #
 +# directories.                                                 #
 +# - Multiple selection is allowed                              #
 +# - The subdirectories are included too                        #
 +#                                                              #
 +# Auteur : kamui57 < kamui_57 AT yahoo DOT fr >                #
 +#                                                              #
 +# Licence : Ce script est un logiciel libre ; vous pouvez le   #
 +# redistribuer et/ou le modifier selon les termes de la        #
 +# Licence Publique Générale GNU ( GNU GPL ) publiée par la Free#
 +# Software Foundation.                                         #
 +#                                                              #
 +################################################################
 +
 + zenity --info \
 +    --text="Please choose now the directories to scan. The subdirectories will be included."
 +
 +directoriesInput=$(zenity --file-selection --directory --multiple --separator=$separator);
 +
 +if [ "$directoriesInput" = "" ]
 +then
 +    zenity --error --text "No directory given! The script will abort."
 +    exit
 +fi</code>
 +
 +==== buildcommandline.bash ====
 +<code bash>#!/bin/bash
 +
 +################################################################
 +# Builds the command line to execute from the chosen options   #
 +# and parameters.                                              #
 +#                                                              #
 +# Auteur : kamui57 < kamui_57 AT yahoo DOT fr >                #
 +#                                                              #
 +# Licence : Ce script est un logiciel libre ; vous pouvez le   #
 +# redistribuer et/ou le modifier selon les termes de la        #
 +# Licence Publique Générale GNU ( GNU GPL ) publiée par la Free#
 +# Software Foundation.                                         #
 +#                                                              #
 +################################################################
 +
 +commande="mp3report "
 +for indexOptions in ${!options[@]}; do
 +    if [ ${picked[$indexOptions]} = TRUE ]
 +    then
 +    ligne="--${options[$indexOptions]}"
 +    case $indexOptions in
 +        2)  # title
 +        if [ "$titleInput" != "" ]
 +        then
 +            ligne="${ligne}=\"$titleInput\""
 +        else
 +            ligne=""
 +        fi
 +        ;;
 +        3)  # outfile
 +        if [ "$outfileInput" != "" ]
 +        then
 +            ligne="${ligne}=\"$outfileInput\""
 +        else
 +            ligne=""
 +        fi
 +        ;;
 +        4)  # template
 +        if [ "$templateInput" != "" ]
 +        then
 +            ligne="${ligne}=\"$templateInput\""
 +        else
 +            ligne=""
 +        fi
 +        ;;
 +        *);;
 +    esac
 +    commande="${commande} ${ligne}"
 +    fi
 +done
 +
 +commande="${commande} \"${directoriesInput}\""
 +</code>
 +
 +==== executecommand.bash ====
 +<code bash>#!/bin/bash
 +
 +################################################################
 +# Prompts if the command is the good command and launches it   #
 +#                                                              #
 +# Auteur : kamui57 < kamui_57 AT yahoo DOT fr >                #
 +#                                                              #
 +# Licence : Ce script est un logiciel libre ; vous pouvez le   #
 +# redistribuer et/ou le modifier selon les termes de la        #
 +# Licence Publique Générale GNU ( GNU GPL ) publiée par la Free#
 +# Software Foundation.                                         #
 +################################################################
 +
 +zenity --title "Execution" --question --text  "The command you have built is : $commande, do you agree?";
 +    if [ "$?" -eq "0" ] # standard input chosen
 +    then
 +    echo ok
 +    else #  not to standard input, therefore to a file, which must be chosen
 +    echo "pas ok"
 +    fi
 +
 +#gksudo lsof | zenity --text-info --width 530
 +echo $commande
 +echo "sortie"
 +$commande</code>
 +
 +----