Type / Créateur
Par Contributeur - Publié le
Tout d'abord
Quand on commence à connaître le mode de fonctionnement de MacOS on se rencontre qu'il utilise deux renseignements pour ouvrir/enregistrer un fichier. Ces renseignements sont 2 mots de 4 lettres en majuscules/minuscules. Il y a le Créateur qui est la signature de l'application qui permet au système de retrouver l'application avec laquelle le fichier a été crée et de la lancer quand on double-clique sur un fichier, par exemple : la signature de SimpleText est ttxt, celle de QuickTime est TVOD. Ensuite ce trouve le Type qui représente les informations contenue dans le ficher, par exemple : un fichier qui contient du texte aura un Type TEXT, un fichier qui contient une vidéo aura un Type MooV, une application aura un Type APPL.
Pourquoi faire un script ?
Parce qu'il y a des fois où l'on veut bidouiller un fichier et que l'on a besoin de définir une autre application pour le fichier. Et (à ma connaissance) il existe que ResEdit qui permet de les modifier facilement. Mais un peu faire un script plus rapide que ResEdit dont on a pas forcément besoin.
Que me faut-il ?
Absolument rien de spécial !!!
Seulement un Mac sous MacOS ;-)
Fonctionnement
Bon, commençons par réfléchir au fonctionnement du script.
Au lancement il faudra qu'il nous demande quel fichier nous voulons modifier et le localiser sur le disque.
Puis il lira les Type et Créateur déjà existant du fichier pour pouvoir nous les afficher au cas on l'on ne veuille pas modifier un des paramètres.
Ensuite il demandera les nouveaux Type et Créateur.
Et enfin, il modifiera le fichier.
Recherche
Démarrage du script
Ce script sera une mini-application et cette ligne fait débuter le script quand on la lance.
on run {}
Comment faire pour choisir le fichier ?
Et oui ce n'est pas si simple. Il faut que le script demande quel fichier nous voulons modifier. Mais le nom de celui-ci ne nous suffit pas ! Il faut aussi le chemin à partir du disque. Localiser un fichier sur un disque est chose... FACILE ! Heureusement tout est prévu.
Vous savez lire un dictionnaire donc c'est partit. Ouvrez celui de "Compléments standard" qui se trouve dans le dossier compléments de pilotages.
Donc que recherche-t-on ?
Que l'utilisateur sélectionne un fichier du disque pour que l'on récupère sa localisation.
Après une recherche (seul ;-) ) vous avez remarqué dans la liste User Interaction : "choose file". Après avoir cliqué dessus vous avez tous les renseignements sur cette commande.
Faisons un peu d'Anglais (...)
choose file: Choose a file on a disk or serveur
=> choisir un fichier sur un disk ou un serveur
Choose file
=> choisir un fichier
[with prompt string] --a prompt to be displayed in the file chooser
=> un texte à afficher dans le sélectionneur de fichier
[of type list] --restrict the files shown to only these file types (up to 4)
=> restreindre les fichiers montrer seulement les fichiers de ces types (jusqu'a 4)
Result: alias --to the chosen file
=> Resultat: localisation --du fichier choisi
Pour cette commande nous souhaitons seulement utiliser les 2 premières lignes et le résultat bien sûr.
Après mûres réflexions voici la ligne de code nous permettant de choisir un fichier et d'avoir sa localisation :
set Fichier to choose file with prompt "Sélectionnez le fichier à modifier."
Donc nous récupérerons l'adresse du fichier dans la variable Fichier. Dans la fenêtre apparaîtra le message : "Sélectionnez le fichier à modifier.". Et voilà.
Lire les Type et Créateur d'un fichier
Là sa se complique. Il va falloir piloter une application. Devinez laquelle ?
Allez un petit effort : elle commence par f et elle est la plus utilisée des MacUsers.
Bon c'est effectivement bien le Finder.
Donc allons faire un tour dans son dictionnaire.
Notez au passage toutes les commandes !
Faites défiler jusqu'a trouver Files and suitcases et plus précisément file.
Donc pour la Class file (attention ce n'est pas une commande):
file type type class
=> le type du fichier sélectionné
creator type type class
=> le créateur du ficher
locked boolean
=> si le fichier est verrouillé ou pas (boolean signifie que la valeur retournée est soit true (vrai) soit false (faux)
Faisons maintenant les lignes de codes.
Attention ici nous allons être obliger de piloter le Finder car nous allons utiliser son dictionnaire, il faut donc penser à le signaler.
tell application "Finder" --on pilote le Finder
set Type to file type of Fichier --on stocke dans la variable Type le Type du fichier dont l'adresse est dans la variable Fichier
set Createur to createur type of Fichier --idem pour le créateur
set Verrouille to locked of Fichier --idem pour savoir si le fichier est verrouillé
end tell --on n'a plus besoin de piloter le Finder
Interaction avec l'utilisateur
Voilà la partie la plus dure.
D'abord nous allons arrêter le script si le fichier est verrouillé car nous ne pourrons le modifier. Il va donc falloir utiliser la boucle if.
Nous avons enregistré l'état du fichier dans la variable Verrouille, celle-ci est égale à true si il est verrouillé et false dans le cas contraire. Pour la tester avec if il faut inverser cette valeur : on veut true si on peut le modifier ( déverrouillé ) et false si on ne peut pas ( verrouillé ). Cela se fait simplement avec l'ajout d'un not.
Ligne de code :
if not Verrouille then
Ensuite il faut demander à l'utilisateur les nouvelles valeur à entrer. Mais attention, il faut absolument 4 caractères, ni plus ni moins. Nous allons donc instaurer une boucle dont on ne sortira que dans le cas où ces critères sont respecté. Cette boucle se fera avec repeat.
Ligne de code :
repeat
Il faut maintenant demander les nouvelles valeurs tout en affichant les anciennes. La commande display dialog (je vous renvoie aux tutoriaux précédant) suffit bien :
display dialog "Type du fichier : " & Type & "
Entrez le nouveau type :" default answer "" with icon note
set NewType to text returned of the result
Il y a bien un retour à la ligne avant "Entrez", c'est une question d'esthétique. Sinon le texte entré dans la boîte de dialogue est récupéré dans la variable NewType.
display dialog "Créateur du fichier : " & Createur & "
Entrez le nouveau créateur :" default answer "" with icon note
set NewCreateur to text returned of the result
Idem pour le créateur.
Il faut maintenant voir si l'utilisateur à effectivement entré 4 caractères pour le type et créateur. Pour connaître le nombre de caractères d'une variable il faut utiliser length.
if (((length of NewType) = 4) and((length of NewCreateur) = 4)) then
Dans le cas où tout est bon il faut sortir de la boucle repeat, et dans le cas contraire lui laisser refaire un tour et signaler que c'est pas le bon nombre.
exit repeat
else
display dialog "Le Type et le Créateur d'un fichier comporte 4 lettres !!!" buttons "OK" default button 1 with icon caution
end if
end repeat
Bingo ;-)
Ecrire les Type et Créateur d'un fichier
C'est l'inverse de la lecture : au lieu de "set" une variable on va "set" le Type et le Créateur du fichier.
tell application "Finder" --on n'oublie pas de piloter le Finder
set file type of Fichier to NewType
set createur type of Fichier to NewCreateur
end tell
Maintenant c'est presque fini.
Boucler le script
il reste juste à terminer la boucle due au verrouillage du fichier.
else
display dialog "Le fichier choisi est verrouillé !" buttons "OK" with icon caution default button 1
end if
end run
Voilà, tout est fini.
Il ne reste plus qu'a enregistrer sous min-application et cocher "ne pas afficher l'écran de démarrage".
Listing
Voilà le listing complet (vous pouvez faire un copier-coller) :
on run {}
set Fichier to choose file with prompt "Sélectionnez le fichier à modifier."
tell application "Finder"
set Type to file type of Fichier
set Createur to creator type of Fichier
set Verrouille to locked of Fichier
end tell
if not Verrouille then
repeat
display dialog "Type du fichier : " & Type & "
Entrez le nouveau type :" default answer "" with icon note
set NewType to text returned of the result
display dialog "Créateur du fichier : " & Createur & "
Entrez le nouveau créateur :" default answer "" with icon note
set NewCreateur to text returned of the result
if (((length of NewType) = 4) and ((length of NewCreateur) = 4)) then
exit repeat
else
display dialog "Le Type et le Créateur d'un fichier comporte 4 lettres !!!" buttons "OK" default button 1 with icon caution
end if
end repeat
tell application "Finder"
set file type of Fichier to NewType
set creator type of Fichier to NewCreateur
end tell
else
display dialog "Le fichier choisi est verrouillé !" buttons "OK" with icon caution default button 1
end if
end run
Have fun