Por que este Applescript para conversar com o iTunes falha com o tempo limite de alguns clientes?

2

Esse script funciona bem para mim e para a maioria dos meus clientes, mas para alguns clientes o tempo limite é excedido com o erro -1712; Não faço ideia do porquê. Eu tentei aumentar o tempo limite, mas não faz diferença.

O arquivo /tmp/itunes_model.txtnão é criado, portanto, parece não estar fazendo nada.

Como posso depurar / corrigir isso?

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

Foi adicionada uma tentativa de captura do erro, conforme solicitado, e a nova execução; a primeira vez que foi executada, realmente funcionou, o que é interessante, mas a segunda vez que falhou novamente, sem obter mais informações úteis.

insira a descrição da imagem aqui

Paul Taylor
fonte
Você pode tentar, em erro de erro, exibir erro de diálogo, finalizar a tentativa no código para obter um relatório deles com mais dados que o número do erro?
jweaks
você poderia me mostrar como eu realmente não sei Applescript
Paul Taylor
É difícil mostrar código nos comentários. Você realmente pode pesquisar no Google por exemplos. Coloque uma linha após 'com tempo limite', que diz: "tentar", em seguida, antes de 'tempo limite fim', coloque três linhas: "na err erro' 'err diálogo display' 'try end'
jweaks
Fiz o que você disse e fiz com que ele corresse novamente e parecia realmente funcionar sem erros, o que faz pouco sentido. Vou relatar quando tiver mais informações
Paul Taylor
@jweaks Ive agora como você pediu, o script realmente funcionou uma vez, mas agora não como antes com nenhuma informação adicional
Paul Taylor

Respostas:

1

Deve algo como isto:

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

Você timeoutdeve estar dentro do tellbloco antes / acima / fora dele.

Parece que você pode estar definindo o tempo limite para o próprio script, em vez do iTunes, que tem um tempo limite padrão de 120 segundos (todos os aplicativos têm um tempo limite padrão de 2 minutos).

Isso pode estar falhando por vários motivos, além do tempo limite normal, como se a pessoa tivesse acabado de atualizar o iTunes, e seu script o abrisse pela primeira vez após a instalação recente, ele não poderá executar as funções normais do iTunes até depois fechar a tela inicial que diz "Bem-vindo à versão X do iTunes - Confira todos os novos recursos !, etc."

Além disso, já faz algum tempo desde que eu trabalhei com o AppleScript, então não me lembro se você instrui ou não um aplicativo do sistema a fazer algo se ele abrir ou não automaticamente. Caso contrário, é possível, você pode precisar Tell SystemEvents to open application "ITunes"(ou qualquer que seja a sintaxe) - ou sempre usar o do shellscriptcomando para abrir o aplicativo; nesse caso, o comando shell atual seria open /Applications/iTunes.app/- o que você pode verificar no Terminal.

O erro também pode ocorrer se o aplicativo iTunes precisar do foco da GUI para que essas operações ocorram e o aplicativo perca automaticamente o foco enquanto o script estiver sendo executado quando outro aplicativo for aberto ou o usuário clicar ou algum cenário desse tipo, qual o seu script precisará ser capaz de prestar contas. Em casos como esse, convém tell SystemEvents to activate application "iTunes"antes que ações importantes ocorram. Isso fará com que a janela do iTunes recupere o foco.

Na verdade, pode ser esse mesmo SystemEventscomando (você provavelmente precisará verificar / corrigir minha sintaxe) que abre o aplicativo inicialmente se ele ainda não estiver aberto no momento em que o script é executado.

rubynorails
fonte
roteiro ooh se você está certo sobre o tempo limite que seria ótimo, Ive enviado alterada para o usuário tentar
Paul Taylor