0 votos

Simple AppleScript script termina antes de tiempo

Tengo un AppleScript script para Música que procesa las pistas seleccionadas y modifica el nombre de la pista.

Básicamente, funciona.

Si selecciono un elemento, funciona sin problemas.

Si selecciono varios elementos, se modifica correctamente el primero artículo. A veces se detendrá ahí; otras veces, procesará varios elementos más. En raras ocasiones, procesará toda la lista de pistas seleccionadas.

He puesto un retraso para ver si eso ayudaba, pero no lo hace.

¿Alguna idea de por qué puede ocurrir esto?

Aquí está mi código:

tell application "Music"
    set selectedTracks to selection
    if selectedTracks is {} then return
    if (get class of (item 1 of selectedTracks)) is not file track then return

    repeat with i from 1 to (length of selectedTracks)
        set thisTrack to item i of selectedTracks
        tell thisTrack to set {trackName} to {get name}

        set my text item delimiters to {"/"}
        set theResults to text items in trackName
        set newTrackName to item 2 of theResults
        set newArtist to item 1 of theResults

        set newTrackName to my removeLeadingAndTrailingSpacesFrom(newTrackName)
        set newArtist to my removeLeadingAndTrailingSpacesFrom(newArtist)

        set name of thisTrack to newTrackName
        set artist of thisTrack to newArtist

        delay 1

    end repeat
end tell

on removeLeadingAndTrailingSpacesFrom(sourceString)
    repeat while character 1 of sourceString = " "
        set sourceString to text 2 thru end of sourceString
    end repeat
    repeat while last character of sourceString = " "
        set endIndex to (length of sourceString) - 1
        set sourceString to text 1 thru endIndex of sourceString
    end repeat
    return sourceString
end removeLeadingAndTrailingSpacesFrom

0voto

Ted Wrigley Puntos 101

No puedo probar esto adecuadamente sin estropear mi propia biblioteca musical, pero sospecho que el problema está en esta línea:

set selectedTracks to selection

Si Music es fiel a la forma, esto devolvería la selección actual como un referencia a una lista de pistas. Pasar por referencia significa que la lista se almacena en Music.app y el script recupera los elementos según sea necesario; también significa que si la selección cambia durante la ejecución del script (lo que probablemente ocurra, ya que estás cambiando los nombres de las pistas), se desajustarán los índices y las referencias dentro del script. Esto puede causar errores, o simplemente puede engañar al bucle de repetición para que piense que ha trabajado a través de todos los elementos, cuando en realidad sólo han desaparecido de la vista.

La solución sería la desreferencia:

set selectedTracks to (get selection)

Esto debería convencer a Music.app de pasar una lista explícita al principio del script, para que los cambios en la selección no se propaguen al script.

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