2 votos

AppleScript "elegir de la lista'. ¿Cómo puedo ejecutar un comando diferente si varias secciones son elegidos?

Tengo un AppleScript que maneja mi casa hecha Después de los Efectos de granja de render. La finca se compone de tres máquinas de procesamiento.

La secuencia de comandos le pide al usuario para hacer una selección de qué máquina(s) de la que desea hacer. Toma su elección(s) y ejecuta un externo de AppleScript de la aplicación dependiendo de la elección(s) que han hecho.

Cada externa AppleScript aplicación se ejecuta un comando que inicia un procesamiento de After Effects uso de ExtendScript como este...

set scriptfile to (POSIX file ("/Applications/Render Farm/Scripts/jsx/render_1.jsx"))
tell application "Adobe After Effects 2020"
    DoScriptFile scriptfile
end tell

El archivo JSX hace referencia anterior le dice a After Effects para iniciar un render de Procesamiento de la Máquina 1. La idea de la secuencia maestra es que el usuario puede seleccionar varios de procesamiento equipos y comenzar todos ellos de representación a la vez.

   set Options to {"Render Node 1", "Render Node 2", "Render Node 3"}

        set ListA to (choose from list Options with prompt "Choose items" with title "Select Stuff" with multiple selections allowed)

   if (ListA contains "Render Node 1") then
        tell application "Render Node 1 App" to activate
    end if

    if (ListA contains "Render Node 2") then
        tell application "Render Node 2 App" to activate
    end if

    if (ListA contains "Render Node 3") then
        tell application "Render Node 3 App" to activate
    end if

Mi script permite múltiples opciones para lograr esto, pero no me gusta cómo secuencial es. Después de que Efectos tiene para recibir la primera AppleScript de comandos, a continuación, ejecute el JSX comando ssh en el procesamiento de la máquina, entonces se abre el aerender programa de línea de comandos varias veces por la máquina (cada instancia puede tomar alrededor de 10 a 15 segundos para abrir). Sólo después de la última aerender instancia ha abierto es After Effects finalmente listo para escuchar otro de comandos de AppleScript y hacerlo todo de nuevo para la segunda máquina.

Sin embargo, yo tengo otro JSX de comandos que pueden iniciar un render en todas las máquinas de procesamiento al mismo tiempo desde dentro de After Effects no hay que esperar. También tengo otros de los que puede iniciar un render en Procesar el Nodo 1 Y 2, Representar el Nodo 1 y 3, y hacer que el Nodo 2 y 3 (básicamente un script diferente para cada combinación.

Me gustaría hacer lo mismo dentro de mi AppleScript secuencia maestra. Pero no quiero mostrar una lista de todas las combinaciones posibles, quiero algo que funciona mucho más elegante.

Lo que me gustaría es modificar la secuencia maestra, de modo que si, por ejemplo, dos selecciones se detectan entonces no se ejecuta dos scripts, que sólo se ejecuta una diferente secuencia de comandos.

Algo como esto, pero con el trabajo de la sintaxis...

   if (ListA contains "Render Node 1" and "Render Node 2") then
        tell application "Render Node 1 & 2 App" to activate
    end if

Cuando corro, me da el error "no se Puede hacer "Render Nodo 2" en el tipo booleano." Pero seguro que hay una manera de lograr esto?

También se tiene que trabajar de forma inteligente. Si elijo Render Node 1 y Render Node 3 SÓLO debe abrir la aplicación Render Node 1 & 3 App. No quiero que se abra también Render Node 1 Appo Render Node 1, 2 & 3 App.

1voto

David Anderson Puntos 2189

Una posible respuesta:

set choices to {"Render Node 1", "Render Node 2", "Render Node 3"}
set answer to choose from list choices ¬
    with prompt "What would you like to do?" with multiple selections allowed and empty selection allowed
if answer is not false and length of answer is not 0 then
    set delimiter to ""
    set counter to 1
    set value to "Render Node "
    repeat with appitem in choices
        if answer contains appitem then
            set value to value & delimiter & counter
            set delimiter to " & "
        end if
        set counter to counter + 1
    end repeat
    set value to value & " App"
    -- tell application value to activate
    display dialog value
end if

o tal vez:

set applist to {¬
    "Render Node 1 App", ¬
    "Render Node 2 App", ¬
    "Render Node 1 & 2 App", ¬
    "Render Node 3 App", ¬
    "Render Node 1 & 3 App", ¬
    "Render Node 2 & 3 App", ¬
    "Render Node 1 & 2 & 3 App"}
set choices to {"Render Node 1", "Render Node 2", "Render Node 3"}
set answer to choose from list choices ¬
    with prompt "What would you like to do?" with multiple selections allowed and empty selection allowed
if answer is not false and length of answer is not 0 then
    set counter to 1
    set value to 0
    repeat with appitem in choices
        if answer contains appitem then
            set value to value + counter
        end if
        set counter to counter * 2
    end repeat
    set value to item value of applist
    -- tell application value to activate
    display dialog value
end if

 

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X