Necesito configurar una carpeta de inspección que se ejecuta una secuencia de comandos en cada elemento añadido. Pero el guión podría tardar 10 minutos o más para que el proceso de un solo elemento.
Lo que he hecho es poner este código en la parte superior de mi guión que mantiene mirando la carpeta y, a continuación, actúa cuando algo se agrega:
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 me siga funcionando. Pero esto es incómodo y torpe.
Pero si puedo adjuntar la do()
cosas como una carpeta en la acción, se pondrá en marcha una nueva instancia tan pronto como se agrega un elemento ... ¿verdad?
Me estoy perdiendo una solución más elegante?
(Para aclarar: Si adjunta una carpeta de action script en una carpeta, que el guión es lanzado varias veces, una vez para cada momento de agregar elementos a la carpeta, independientemente de si otra instancia de dicho script se está ejecutando. Esto es lo que estoy tratando de evitar. Por ejemplo, si 10 artículos cae dentro de la carpeta de inspección, y luego, mientras los primeros 10 elementos aún están siendo procesados, otro de los 5 elementos se quitan, se iniciará una segunda instancia de la secuencia de comandos.)
La única otra cosa que se me ocurre es la de mantener un "status" del archivo que va a ser puesto a "ocupado" por el guión, y "inactivo" cuando se realiza el procesamiento, por lo que las otras instancias de la secuencia de comandos se espere a que el estado "inactivo" ... pero esto también es torpe.