1 votes

Un dossier de veille qui ne traite qu'un seul élément à la fois ?

Je dois mettre en place un dossier de veille qui exécute un script sur chaque élément ajouté. Mais le script pourrait prendre 10 minutes ou plus pour traiter un seul élément.

Ce que j'ai fait, c'est mettre ce code en haut de mon script qui continue à surveiller le dossier et agit quand quelque chose est ajouté :

set watchFolderAlias to (POSIX file watchFolder as alias)
set r to {}
repeat
    tell application "Finder" to set r to ¬
        (sort (get files of watchFolderAlias whose kind is "alias") ¬
            by creation date)
    if (count of r) != 0 then
        do(first item of r as alias)
    end if
    delay 5
end repeat

on do(x)
   (* do 10 minutes of stuff with x *)
end do

... et ensuite je le laisse tourner. Mais c'est encombrant et maladroit.

Mais si j'attache le do() en tant qu'action de dossier, il lancera une nouvelle instance dès qu'un élément sera ajouté... n'est-ce pas ?

Ai-je manqué une solution plus élégante ?

(Pour clarifier : si vous attachez une action de dossier script à un dossier, ce script est lancé . multiple une fois, une fois pour chaque fois que vous ajoutez des éléments au dossier, indépendamment de de savoir si une autre instance dudit script est déjà en cours d'exécution. C'est ce que j'essaie d'éviter. Par exemple, si 10 éléments sont déposés dans le dossier de veille, et qu'ensuite, alors que les 10 premiers éléments sont toujours en cours de traitement, 5 autres éléments sont déposés, cela lancera une instance de deuxième instance du script.)

La seule autre chose que je peux trouver est de maintenir un fichier "status" qui sera mis à "busy" par le script, et "idle" quand le traitement est terminé, de sorte que les autres instances du script attendront l'état "idle" ... mais cela est également maladroit.

1voto

moodforaday Points 2633

Essayez Hazel de https://www.noodlesoft.com

Je n'ai pas eu de processus aussi long, mais d'après mon expérience, Hazel semble toujours opérer de manière séquentielle sur les fichiers, et ne lance pas un nouveau processus tant que l'ancien n'est pas terminé.

C'est une application Mac inestimable, IMO. Je l'utilise exclusivement à la place de Folder Actions. C'est une application payante, mais il y a une démo gratuite et complète disponible. Le développeur est également très serviable et l'application est bien maintenue. Hautement recommandé.

Je pense que votre seule autre alternative est un fichier de verrouillage, ce qui est gênant, comme vous l'avez mentionné.

0 votes

J'utilise Hazel depuis des années, c'est génial. Mais je n'avais pas réalisé qu'il traitait les éléments un par un lors de l'utilisation d'un Applescript externe. Je vais devoir le tester. Merci beaucoup. (Mais je préférerais quand même une solution "native").

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X