AppleScript et Folder Actions

damien_t

Membre actif
21 Juin 2004
295
13
45
Bonjour tout le monde.

Je me decide a poster ma question parce que la, j'en perds vraiment mon latin.
Voici mon pb:
J'ai un disque dur appele "The Very Big One". Dedans, j'ai un repertoire Download. Firefox met tous les fichiers que je telecharge dans ce repertoire. Dans ce rep Download, j'ai d'autres rep comme "Zips", "Pdfs", "Mac Stuff", etc.
Ce que je voulais faire, c'est attacher un petit script qui me servirait de "Gare de triage" qui m'enverrais tous les fichiers telecharges dans les bons sous-repertoires. Le boulot parfait pour les Folder Actions. Sauf que pour une raison que je ne comprend pas, mon script ne marche presque pas.
Voici le coupable:
Bloc de code:
  on adding folder items to this_folder after receiving these_items
  	tell application "Finder"
  		activate
  		set file_count to count files of this_folder
  		
  		if file_count > 0 then
  			repeat with aFile in added_items
 				 if the name extension of aFile is in {"pdf", "doc"} then
 		 			move aFile to folder "The Very Big One:Download:Pdfs"
 				 else if the name extension of aFile is in {"zip"} then
 		 			move aFile to folder "The Very Big One:Download:Zips"
 				 else if the name extension of aFile is in {"sit", "sitx", "dmg"} then
 		 			move aFile to folder "The Very Big One:Download:Mac Stuff"
 				 end if
  				 beep
  			end repeat
  		end if
  	end tell
  end adding folder items to

Parfois (pas toujours), quand un dmg arrive, il est bien deplace dans le rep "Mac Stuff" et j'entends le beep. Dans tous les autres cas, je vois la fenetre qui clignote (un genre de beep visuel) deux ou trois fois et le fichier n'est pas deplace et je n'entends pas le beep. Si je manipule un fichier qui n'a aucune des extensions precisees dans le script, la fenetre beep "visuellement" aussi.
Je ne comprends rien a ce qui arrive et je me demande comment debugger ce truc. J'ai regarde sur le net, et j'ai rien trouve qui me mette sur la voie.

Est-ce qu'une bonne ame aurait une idee ? Merci d'avance.
 
Bonjour,

Ton script est bourré de fautes. En voici le "corrigé".
Bloc de code:
on adding folder items to this_folder after receiving added_items
	delay 10
	tell application "Finder"
		repeat with aFile in added_items
			if the name extension of aFile is in {"pdf", "doc"} then
				move aFile to folder "Pdfs" of folder this_folder with replacing
			else if the name extension of aFile is in {"zip"} then
				move aFile to folder "Zips" of folder this_folder with replacing
			else if the name extension of aFile is in {"sit", "sitx", "dmg"} then
				move aFile to folder "Mac Stuff" of folder this_folder with replacing
			else
				move aFile to folder "Divers" of folder this_folder with replacing
			end if
		end repeat
	end tell
end adding folder items to

Malgré tout, je te déconseille fortement d'utiliser les "Folder Actions".
C'est programmé par des manchots et farci de bugs.
1- un script de dossier ne peut marcher que si le dossier auquel il est attaché est ouvert. Du moins en théorie. C'est ce qui explique que beaucoup de gens ne comprennent pas pourquoi leur script marche "des fois".
2- la commande 'after receiving' devrait ne renvoyer de résultat que lorsque tous les fichiers ont fini d'être reçus. Malheureusement, elle s'exécute dans les 2 secondes après réception du premier fichier. Ce bug est responsable du fait d'une commande est souvent exécutée plusieurs fois, ou bien pas du tout.

J'en passe et des meilleures.

Je te conseille donc de faire plutôt un Droplet sur lequel tu glissera les fichiers à classer.
C'est moins automatique, moins transparent, mais ça marche sans aucun bug.
Voici un début:
Bloc de code:
property this_folder : ""--mettre ici le chemin d'accès à ton dossier

on open added_items
	repeat with aFile in added_items
		tell application "Finder"
			if the name extension of aFile is in {"pdf", "doc"} then
				move aFile to folder "Pdfs" of folder this_folder with replacing
			else if the name extension of aFile is in {"zip"} then
				move aFile to folder "Zips" of folder this_folder with replacing
			else if the name extension of aFile is in {"sit", "sitx", "dmg"} then
				move aFile to folder "Mac Stuff" of folder this_folder with replacing
			else
				move aFile to folder "Divers" of folder this_folder with replacing
			end if
		end tell
		
	end repeat
end open

;)
 
zeRafioScripter a dit:
Bonjour,

Ton script est bourré de fautes. En voici le "corrigé".
[...]
Merci beaucoup ! Effectivement, ca marche beaucoup mieux.

Malgré tout, je te déconseille fortement d'utiliser les "Folder Actions".
C'est programmé par des manchots et farci de bugs.
1- un script de dossier ne peut marcher que si le dossier auquel il est attaché est ouvert. Du moins en théorie. C'est ce qui explique que beaucoup de gens ne comprennent pas pourquoi leur script marche "des fois".
2- la commande 'after receiving' devrait ne renvoyer de résultat que lorsque tous les fichiers ont fini d'être reçus. Malheureusement, elle s'exécute dans les 2 secondes après réception du premier fichier. Ce bug est responsable du fait d'une commande est souvent exécutée plusieurs fois, ou bien pas du tout.
J'en passe et des meilleures.
J'ai aussi remarque ce genre de disfonctionnements mais je les ai mis sur le compte de mon manque d'experience avec applescript. ;)
Par contre, ca m'arrange pas trop pour ce que je voulais faire. Le classement automatique etait une premiere etape. Ensuite, je pensais attacher d'autres scripts aux sous-repertoires. Dans le cas des pdfs, c'etait les indexer au fur et a mesure qu'ils sont enregistres sur le disque (un genre de mini spotlight). Je voulais eviter de passer par la crontab mais j'ai l'impression que ca va etre necessaire.

Je te conseille donc de faire plutôt un Droplet sur lequel tu glissera les fichiers à classer.
C'est moins automatique, moins transparent, mais ça marche sans aucun bug.
Voici un début:
[...]

;)
Oui, ca marche bien. Ce que j'ai fait, c'est creer un droplet que j'ai mis dans mon repertoire download (quand je l'execute depuis le bureau, il copie mais deplace pas les fichiers). Glisser tous mes fichiers a classer une fois de temps en temps fera tres bien l'affaire.


Merci beaucoup !