¿Por qué este Applescript para hablar con iTunes falla con el tiempo de espera para algunos clientes?

2

Este script funciona bien para mí y para la mayoría de mis clientes, pero para algunos clientes se agota el tiempo con el error -1712; No tengo idea de por qué. He intentado aumentar el tiempo de espera, pero no hace ninguna diferencia.

El archivo /tmp/itunes_model.txt no se crea, por lo que no parece estar haciendo nada.

¿Cómo puedo corregir / corregir esto?

with timeout of 1200 seconds
tell application "iTunes"

    if (count of every file track of library playlist 1) is equal to 0 then
        set thePath to (POSIX file "/tmp/itunes_model.txt")
        set fileref to open for access (thePath) with write permission
        set eof fileref to 0
        close access fileref
        return
    end if

    tell every file track of library playlist 1
        script performancekludge
            property tracknames : its name
            property locs : its location
            property persistids : its persistent ID
        end script
    end tell
end tell

set thePath to (POSIX file "/tmp/itunes_model.txt")
set fileref to open for access (thePath) with write permission
set eof fileref to 0

tell performancekludge
    repeat with i from 1 to length of its tracknames
        try
            set nextline to item i of its tracknames ¬
                & "::" & POSIX path of item i of its locs ¬
                & "::" & item i of its persistids
            write nextline & linefeed as «class utf8» to fileref
        end try
    end repeat
end tell
close access fileref
end timeout

Se agregó un try-catch alrededor del error según se solicitó y se volvió a hacer; La primera vez que se ejecutó funcionó, lo que es interesante, pero la segunda vez falló nuevamente, ya que no recopila más información útil.

    
pregunta Paul Taylor 06.11.2015 - 09:34

1 respuesta

1

Debería ser algo como esto:

tell application "iTunes"
    with timeout of 1200 seconds
    ...
    end timeout
end tell

Tu timeout debería estar dentro del bloque tell en lugar antes / arriba / fuera de él.

Parece como si estuvieras configurando el tiempo de espera para el script en lugar de iTunes que tiene un tiempo de espera predeterminado de 120 segundos (todas las aplicaciones tienen un tiempo de espera predeterminado de 2 minutos).

Esto podría estar fallando por varias razones además de los tiempos de espera normales, como si la persona actualizó iTunes y la secuencia de comandos lo abre por primera vez después de que se instaló recientemente, no podrá ejecutar iTunes normal. funciona hasta después de cerrar la pantalla de bienvenida que dice "Bienvenido a la versión X de iTunes - ¡Echa un vistazo a todas las nuevas funciones!"

Además, ha pasado un tiempo desde que trabajé con AppleScript, por lo que no recuerdo si le dices a una aplicación del sistema que haga algo si se abre automáticamente o no. Si no, es posible, puede que necesite Tell SystemEvents to open application "ITunes" (o cualquiera que sea la sintaxis), o siempre puede usar el comando do shellscript para abrir la aplicación, en cuyo caso el comando de shell real sería open /Applications/iTunes.app/ - - Lo que se puede verificar en la Terminal.

El error también podría ser si la aplicación de iTunes necesita un enfoque GUI para que estas operaciones se realicen y la aplicación pierde automáticamente el foco mientras se ejecuta la secuencia de comandos cuando se abre otra aplicación o si el usuario hace clic o algún escenario de ese tipo, que su script tendrá que ser capaz de tener en cuenta. En casos como este, es posible que desee tell SystemEvents to activate application "iTunes" antes de que se realicen acciones importantes. Esto hará que la ventana de iTunes recupere el enfoque.

En realidad, puede ser este mismo comando SystemEvents (es probable que necesites verificar / corregir mi sintaxis) lo que inicialmente abre la aplicación si aún no está abierta en el momento en que se ejecuta el script.

    
respondido por el rubynorails 25.11.2015 - 20:50

Lea otras preguntas en las etiquetas