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 :
- Obtenir les morceaux sélectionnés par l'utilisateur.
- Demander à l'utilisateur quel champ il souhaite éditer, parmi les champs Nom, Artiste, Album.
- Demander à l'utilisateur combien de caractères il souhaite supprimer dans le champ, et à quel endroit (en tête ou en fin de champ).
- 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 :
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 :
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.
Remarque. Pour prendre en compte le cas où l'utilisateur aurait ouvert plusieurs fenêtres, il faudrait
utiliser une instruction du type :
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 :
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 :
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
set
champ to
(
choose from
list champs with
prompt "Quel champ éditer ?"
default items "Nom"
)
as
string

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:
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 :
set
choix to
display dialog "Combien de caractères supprimer dans \""
&
champ &
"\" ?"
default answer "2"
buttons {"Au début"
, "À la fin"
, "Annuler"
}
Après interaction avec l'utilisateur, la variable choix contient une liste du type :
{text returned:"2"
, button returned:"À la fin"
}
Il est ensuite possible d'obtenir les informations qui nous intéressent avec ces deux instructions :
-- 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 :
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 :
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 :
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 :
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 :
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 :
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).

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