Necesito configurar una carpeta de inspección que ejecute un script en cada elemento agregado. Pero la secuencia de comandos podría tardar 10 minutos o más en procesar un solo elemento.
Lo que he hecho es poner este código en la parte superior de mi script que sigue viendo la carpeta y luego actúa cuando se agrega algo:
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
... y luego sigo funcionando. Pero esto es engorroso e incómodo.
Pero si adjunto do()
stuff como una acción de carpeta, se iniciará una nueva instancia tan pronto como se agregue un elemento ... ¿verdad?
¿Me estoy perdiendo una solución más elegante?
(Para aclarar: si adjunta un script de acción de carpeta a un folder, ese script se ejecuta varias veces , una vez por cada vez que agregue elementos a la carpeta, independientemente de de si ya se está ejecutando otra instancia de dicho script. Esto es lo que trato de evitar. Por ejemplo, si se colocan 10 elementos en la carpeta de visualización y luego, mientras los primeros 10 elementos aún se están procesando, otros 5 los elementos se eliminan, esto iniciará una segunda instancia del script.)
La única otra cosa que puedo hacer es mantener un archivo de "estado" que el script establecerá en "ocupado", e "inactivo" cuando se termine de procesar, para que las otras instancias del script esperen para el estado "inactivo" ... pero esto también es incómodo.