IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

À la découverte d'AppleScript


précédentsommairesuivant

II. Renommer des morceaux iTunes

Nous allons voir dans cette deuxième partie comment AppleScript permet d'automatiser des tâches répétitives et donc fastidieuses, tel renommer des morceaux dans une bibliothèque iTunes.

II-A. Objectif

Importer un album ou des fichiers audio dans iTunes conduit parfois à ce que les informations associées aux morceaux (titre, auteur, etc.) soient mal formatées. Un numéro peut avoir été collé au titre du morceau, ou ce dernier se trouver collé au nom de l'artiste.

Éditer ces informations à la main peut s'avérer fastidieux… Nous allons donc réaliser un script AppleScript permettant de supprimer des caractères à la fin ou au début des champs titre, artiste et album, cela pour tous les morceaux sélectionnés dans la fenêtre iTunes.

II-B. Algorithme

Le script suit l'algorithme suivant :

  1. Obtenir les morceaux sélectionnés par l'utilisateur.
  2. Demander à l'utilisateur quel champ il souhaite éditer, parmi les champs Nom, Artiste, Album.
  3. Demander à l'utilisateur combien de caractères il souhaite supprimer dans le champ, et à quel endroit (en tête ou en fin de champ).
  4. Appliquer l'édition du champ sur tous les morceaux sélectionnés.

II-C. Le script

Nous allons maintenant réaliser cet algorithme, étape par étape.

II-C-1. Obtenir les morceaux sélectionnés par l'utilisateur.

Le script commence par une instruction tell, qui indique à AppleScript quelle application est l'objet de nos actions :

 
Sélectionnez
tell application "iTunes"

L'instruction suivante permet d'obtenir d'iTunes la liste des morceaux sélectionnés par l'utilisateur, et de l'affecter à la variable morceaux :

 
Sélectionnez
set morceaux to selection

selection est une propriété de la classe application, mais aussi des classes browser window et playlist window. On obtient des informations à son sujet en la recherchant dans le dictionnaire de pilotage d'iTunes.

Image non disponible

Remarque. Pour prendre en compte le cas où l'utilisateur aurait ouvert plusieurs fenêtres, il faudrait utiliser une instruction du type :

 
Sélectionnez
set morceaux to selection of window i

Il convient ensuite de tester que l'utilisateur a bien sélectionné des morceaux. Cela se fait en testant que la variable morceaux est une liste vide :

 
Sélectionnez
if morceaux is {} then
display dialog "Vous devez sélectionner des morceaux !"
buttons {"OK"} with icon caution giving up after 15
return
end if

Dans ce cas, on affiche un message à l'aide de la commande display dialog. Celle-ci comprend un certain nombre d'options, permettant de paramétrer les boutons affichés, une éventuelle icône et le temps d'affichage du message.

Remarque. On pourrait aussi envisager de tester la cardinalité de la variable morceaux, afin d'identifier le cas où l'utilisateur aurait sélectionné un très grand nombre de morceaux, ce qui serait suspect. La cardinalité d'une liste est donnée par l'instruction length of liste.

II-C-2. Demander à l'utilisateur quel champ il souhaite éditer, parmi les champs Nom, Artiste, Album.

On définit d'abord une variable de type liste, champs, contenant les noms des champs éditables :

 
Sélectionnez
set champs to {"Nom", "Artiste", "Album"}

Puis on demande à l'utilisateur de sélectionner un champ dans cette liste, à l'aide de la commande choose from list

 
Sélectionnez
set champ to (choose from list champs with prompt "Quel champ éditer ?"
default items "Nom") as string
Image non disponible

Remarque. Les capacités de dialogue avec l'utilisateur d'AppleScript sont assez limitées. Pour définir des IHM plus élaborées, il faudra se tourner vers AppleScript Studio.

La commande choose renvoie une liste contenant un des chaînes de caractères de la liste champs, ou bien le booléen false, si l'utilisateur a cliqué sur le bouton Annuler. En transtypant en type string, on peut ensuite tester la réponse de l'utilisateur, et quitter éventuellement le script avec la commande return:

 
Sélectionnez
if champ is "false" then
display dialog "Abandon du script !" buttons {"OK"} with icon note
giving up after 15
return
end if

II-C-3. Demander à l'utilisateur combien de caractères il souhaite supprimer dans le champ, et à quel endroit (en tête ou en fin de champ).

Une variante de la commande display dialog va permettre de faire saisir une valeur par l'utilisateur. En précisant l'option default answer, un champ de saisie apparaît dans la fenêtre de message :

 
Sélectionnez
set choix to display dialog "Combien de caractères supprimer dans \""
& champ & "\" ?" default answer "2"
buttons {"Au début", "À la fin", "Annuler"}
Image non disponible

Après interaction avec l'utilisateur, la variable choix contient une liste du type :

 
Sélectionnez
{text returned:"2", button returned:"À la fin"}

Il est ensuite possible d'obtenir les informations qui nous intéressent avec ces deux instructions :

 
Sélectionnez
-- le nombre de caractères à couper
set longueur to text returned of choix
-- en début ou en fin de champ
set ou to button returned of choix

Remarque. La marque des commentaires de code est -- dans AppleScript.

Si le bouton Annuler a été cliqué, une erreur est déclenchée par la commande display dialog - laquelle se base sur l'intitulé du bouton lui-même : seuls les intitulés « Annuler » et « Cancel » fonctionnent.

Cette erreur peut être capturée par un gestionnaire on error, afin de détecter le cas où l'utilisateur a annulé la saisie :

 
Sélectionnez
try
set choix to display dialog ...
on error
display dialog "Abandon du script !" with icon caution buttons {"OK"}
return
end try

Il reste ensuite à vérifier que la valeur saisie par l'utisateur est bien un entier naturel. On procède également à l'aide d'un bloc try, d'un gestionnaire on error et d'une boucle repeat :

 
Sélectionnez
repeat
try
set longueur to (longueur as integer) + 1
exit repeat
on error
display dialog "Vous devez entrer une valeur numérique !"
with icon caution buttons {"OK"}
set choix to display dialog "Combien de caractères supprimer ?"
default answer "2" buttons {"OK"}
set longueur to text returned of choix
end try
end repeat

Ce code est basé sur le fait que la tentative de transtypage de longueur déclenchera une erreur si celui-ci n'est pas un nombre.

II-C-4. Appliquer l'édition du champ sur tous les morceaux sélectionnés.

L'édition de tous les morceaux sélectionnés se fait à l'aide d'une boucle repeat with, qui permet d'appliquer un traitement à tous les éléments d'une liste :

 
Sélectionnez
repeat with un_morceau in morceaux
tell un_morceau
...
end repeat

L'édition du champ est réalisée avec la commande text thru, qui permet d'extraire une portion d'une chaîne de caractères :

 
Sélectionnez
text idx1 thru idx2 of chaine

L'utilisation d'index à valeur négative permet de réaliser ce que nous souhaitons, soit couper des caractères au début ou à la fin d'une chaîne :

 
Sélectionnez
if ou is "Au début" then
set idx1 to longueur
set idx2 to -1
else
set idx1 to 1
set idx2 to -longueur
end if

Il reste finalement à identifier quel champ iTunes à éditer, à l'aide d'un test conditionnel sur la variable champ, et à positionner le champ considéré avec une commande set, à partir de la valeur obtenue par une commande get et modifiée par text thru :

 
Sélectionnez
if champ is item 1 of champs then
try
set name to text idx1 thru idx2 of (get name)
end try
else if champ is item 2 of champs then
try
set artist to text idx1 thru idx2 of (get artist)
end try
else
try
set album to text idx1 thru idx2 of (get album)
end try
end if

Voilà, le script est terminé ! La figure suivante montre son application à un jeu d'essai (suppression des numéros de piste).

Image non disponible
Image non disponible

Ce script pourra facilement être généralisé à d'autres champs éditables des morceaux iTunes, selon vos besoins.


précédentsommairesuivant

Copyright © 2008 Jean-Philippe Moreux. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.