Perché questo Applescript per parlare con iTunes non riesce con il timeout per alcuni clienti?

2

Questo script funziona bene per me e la maggior parte dei miei clienti, ma per alcuni clienti va in time-out con error -1712; Non ho idea del perché. Ho provato ad aumentare il timeout, ma non fa differenza.

Il file /tmp/itunes_model.txt non viene creato, quindi sembra che non stia facendo nulla.

Come posso eseguire il debug / risolvere questo problema?

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

Aggiunto un try-catch attorno all'errore come richiesto e reran; la prima volta che è stato eseguito, ha funzionato, il che è interessante, ma la seconda volta ha fallito di nuovo, non aggiungendo ulteriori informazioni utili.

    
posta Paul Taylor 06.11.2015 - 09:34
fonte

1 risposta

1

Dovrebbe essere qualcosa del tipo:

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

Il tuo timeout deve essere all'interno del blocco tell invece che / sopra / al di fuori di esso.

Sembra che potresti impostare il timeout per lo script stesso invece di iTunes che ha un timeout predefinito di 120 secondi (tutte le applicazioni hanno un timeout predefinito di 2 minuti).

Questo potrebbe fallire per diversi motivi oltre ai normali timeout, ad esempio se la persona ha appena aggiornato iTunes e il tuo script lo apre per la prima volta dopo che è stato installato di recente, non sarà in grado di eseguire iTunes normale funzioni fino a dopo aver chiuso la schermata iniziale che dice "Benvenuto in versione X di iTunes - Scopri tutte le nuove funzionalità !, ecc."

Inoltre, è passato un po 'di tempo da quando ho lavorato con AppleScript, quindi non ricordo se si dice a un'applicazione di sistema di fare qualcosa se si apre automaticamente o meno. In caso contrario, è possibile che sia necessario Tell SystemEvents to open application "ITunes" (o qualunque sia la sintassi) - oppure è possibile utilizzare sempre il comando do shellscript per aprire l'applicazione, nel qual caso il comando di shell effettivo sarà open /Applications/iTunes.app/ - - che puoi verificare in Terminal.

L'errore potrebbe essere anche se l'app di iTunes richiede il focus della GUI per queste operazioni e l'applicazione perde automaticamente lo stato attivo mentre lo script viene eseguito quando viene aperta un'altra applicazione o l'utente fa clic o qualche scenario di quel tipo, che il tuo script dovrà essere in grado di rendere conto. In casi come questo, potresti voler tell SystemEvents to activate application "iTunes" prima che avvengano azioni importanti. Ciò farà sì che la finestra di iTunes ripristini la messa a fuoco.

Potrebbe essere lo stesso comando SystemEvents (probabilmente dovrai controllare / correggere la mia sintassi) che inizialmente apre l'applicazione se non è già aperta al momento dell'esecuzione dello script.

    
risposta data 25.11.2015 - 20:50
fonte

Leggi altre domande sui tag