Devo impostare una cartella di controllo che esegua uno script su ciascun elemento aggiunto. Ma lo script potrebbe richiedere 10 minuti o più per elaborare un singolo elemento.
Quello che ho fatto è mettere questo codice nella parte superiore del mio script che continua a guardare la cartella e poi agisce quando qualcosa viene aggiunto:
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
... e poi continuo a farlo funzionare. Ma questo è ingombrante e imbarazzante.
Ma se allego la roba do()
come azione di una cartella, verrà lanciata una nuova istanza non appena viene aggiunto un elemento ... giusto?
Mi manca una soluzione più elegante?
(Per chiarire: se si collega uno script di azione di una cartella a una cartella, tale script viene avviato più volte, una volta ogni volta che si aggiungono elementi alla cartella, indipendentemente se un'altra istanza di detto script è già in esecuzione, questo è quello che sto cercando di evitare, ad esempio, se 10 articoli vengono lasciati nella cartella di controllo, e quindi, mentre i primi 10 elementi sono ancora in fase di elaborazione, altri 5 gli oggetti vengono rilasciati, questo lancerà una seconda istanza dello script.)
L'unica altra cosa che riesco a fare è mantenere un file di "stato" che sarà impostato su "occupato" dallo script, e "inattivo" al termine dell'elaborazione, in modo che le altre istanze dello script attenderanno per lo stato "inattivo" ... ma anche questo è scomodo.