Objectif : programmer une interface pour renommer des fichiers en masse avec un grand nombre de possibilités et d'options.
Ce projet d'IHM est largement inspiré d'un "donationware" existant et portant le même nom mais utilisable uniquement sous le système d'exploitation Windows. Cet outil, qui s'avère extrêmement pratique à l'usage, trouvera de nombreux adeptes sous Linux. De plus, écrit en TclTk, il sera portable, ce qui autorisera son usage non seulement sous Linux mais aussi Windows et MacOS.
Cahier des charges
L'application doit permettre de renommer une série de fichiers, de façon récursive ou pas, ces fichiers étant uniquement des fichiers ordinaires (les répertoires ne seront pas concernés par cette application contrairement à l'application THE Rename originale).
Opérations : tout d'abord, il convient de distinguer les traitements qui pourront être effectués sur le nom en lui-même d'une part et sur l'extension d'autre part.
Pour le nom du fichier, on doit pouvoir :
- supprimer les espaces inutiles (avant ou après le nom et/ou les espaces consécutifs),
- préciser si le nom d'origine est conservé (en préfixe ou en suffixe) ou remplacé par un nom unique ou par une règle de substitution simple utilisant les expressions régulières,
- opérer sur la casse des lettres : première lettre en majuscule et le reste en minuscule ou bien inversion de la casse (i.e les majuscules deviennent des minuscules et inversement),
- ajouter au nom un compteur (fic001, fic002, fic003, ...) dont on choisira la valeur de départ et l'incrément,
- remplacer le nom par le contenu du fichier (cf. ci-dessous)
Pour l'extension des fichiers, l'application doit autoriser :
- sa suppression pure et simple,
- sa substitution par une extension choisie préalablement,
- sa conversion en minuscule ou en majuscule,
- sa substitution dans un formalisme approprié (par exemple, les extensions jpg, jpeg, JPG, JPEG seront remplacées par l'extension jpg).
Sélection : la sélection des fichiers concernés par l'opération doit pouvoir se faire de façon intuitive soit directement par l'utilisateur (sélection multiple ou filtre) soit par l'intermédiaire d'une méthode de recherche des noms de fichiers.
La sélection multiple se fera de façon classique par une sélection à la souris des noms de fichiers dans une liste. Le filtre peut s'appliquer aux noms des fichiers (en utilisant uniquement les caractères jokers du shell - globbing - que sont ?, * et [ ]) ou à leur extension.
La recherche des fichiers doit offrir les possibilités suivantes :
- une recherche récursive ou non (i.e sous-dossiers ou uniquement dossier courant),
- les opérateurs sur le nom : contient, ne contient pas, est, n'est pas, commence par, finit par,
- le respect ou non de la casse (i.e distingo entre majuscules et minuscules).
Type de fichiers : l'application d'origine permet de modifier le nom des fichiers de polices de caractères (TTF), des fichiers HTML, des fichiers audio (MP3) ou bien des fichiers de photos numériques (format EXIF) par l'intermédiaire de leurs tagsinternes. Dans le cadre de ce projet, on se limitera aux fichiers de photos numériques qui contiennent un en-tête au format EXIF. Une extension de TclTk, nommée tcllib, permet, entre autre, d'afficher le contenu d'un en-tête EXIF sur la sortie standard. Voici un exemple d'utilisation :
set auto_path "$auto_path /usr/share/tcl8.4/tcllib-1.7"
package require exif
puts [exif::analyzeFile "/home/dupont/Photos/photo255.jpg"]
Par l'intermédiaire de cette extension, votre application devra offrir les moyens de renommer un ensemble de photos numériques suivant divers critères de votre choix. L'un d'eux est obligatoire, c'est la possibilité de renommer ce type de fichiers en remplaçant chaque nom par la date de prise de vue de la photo (suivie éventuellement d'un numéro d'ordre ou de l'heure, afin de distinguer les doublons éventuels).
Optionnel : les extensions suivantes constitueraient un "plus" apprécié
- la création d'un fichier de "log" i.e d'un fichier qui retrace les différentes opérations effectuées lors d'une session de travail,
- la possibilité d'annuler la dernière opération.
Programmation
L'ensemble du projet devra être écrit en TclTk exclusivement. L'utilisation des namespace est recommandée. De même, il est indispensable de construire ce projet modulairement, seule approche succeptible de garantir au minimum les principes d'encapsulation, de protection et de réutilisabilité.
Notation
La notation de ce projet prendra en compte le respect du cahier des charges, la qualité de la programmation (robustesse, lisibilité et modularité de votre code) ainsi que les aspects propres à une IHM que sont : cohérence, concision (limitation du nombre d'intervention de l'utilisateur), structuration des activités (décomposition d'une tâche complexe), flexibilité (application personnalisable), retour d'informations et gestion des erreurs, toutes choses qui garantissent une interface ergonomique et intuitive et qui n'apparaissent pas explicitement dans cette présentation.