2 votos

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

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

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

¿Cómo puedo depurar/arreglar 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

La primera vez que se ejecutó funcionó, lo cual es interesante, pero la segunda vez volvió a fallar sin obtener más información útil.

enter image description here

0 votos

¿Puedes poner un try, on error err, display dialog err, end try en el código para que te devuelvan un informe con más datos que el número de error?

0 votos

Podría mostrarme cómo no sé realmente Applescript

0 votos

Es difícil mostrar el código en los comentarios. Puedes buscar ejemplos en Google. Pon una línea después de 'with timeout' que diga: "try" luego antes de 'end timeout', pon tres líneas: "on error err" 'display dialog err' 'end try'

2voto

rubynorails Puntos 466

Debería ser algo así:

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

Su timeout debe estar dentro del tell bloque en lugar de antes/sobre/fuera de él.

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

Esto podría fallar por varias razones además de los tiempos de espera normales, como por ejemplo si la persona acaba de actualizar iTunes, y su scriptlo abre por primera vez después de haberlo instalado recientemente, no podrá ejecutar las funciones normales de iTunes hasta después de cerrar la pantalla de inicio que dice "¡Bienvenido a la versión X de iTunes - Comprueba todas las nuevas características!, etc.".

Además, hace tiempo que no trabajo con AppleScript, así que no recuerdo si si le dices a una aplicación del sistema que haga algo si se abre automáticamente o no. Si no es así, es posible, que necesites Tell SystemEvents to open application "ITunes" (o cualquiera que sea la sintaxis) -- o siempre se puede utilizar el do shellscript para abrir la aplicación, en cuyo caso el comando shell real sería open /Applications/iTunes.app/ -- que puedes verificar en el Terminal.

El error también podría deberse a que la aplicación de iTunes necesita el enfoque de la interfaz gráfica de usuario para que estas operaciones se lleven a cabo y la aplicación pierde automáticamente el enfoque mientras se ejecuta el script cuando se abre otra aplicación o el usuario hace clic en otro lugar 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 tenga lugar cualquier acción importante. Esto hará que la ventana de iTunes recupere el foco.

En realidad puede ser este mismo SystemEvents (probablemente tenga que comprobar/corregir mi sintaxis) que abre inicialmente la aplicación si no está ya abierta en el momento en que se ejecuta el script.

0 votos

Ooh si tienes razón sobre el tiempo de espera que sería genial, Ive envió modificado script al usuario para tratar de

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