Mengapa Applescript ini untuk berbicara dengan iTunes gagal dengan batas waktu untuk beberapa pelanggan?

2

Skrip ini berfungsi dengan baik untuk saya dan sebagian besar pelanggan saya, tetapi untuk beberapa pelanggan itu gagal karena -1712; Saya tidak tahu kenapa. Saya sudah mencoba meningkatkan batas waktu, tetapi tidak ada bedanya.

File /tmp/itunes_model.txttidak dibuat sehingga sepertinya tidak melakukan apa-apa.

Bagaimana saya bisa men-debug / memperbaiki ini?

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

Menambahkan try-catch di sekitar kesalahan seperti yang diminta dan reran; pertama kali dijalankan itu benar-benar bekerja yang menarik, tetapi yang kedua gagal lagi tidak mendapatkan informasi yang lebih berguna.

masukkan deskripsi gambar di sini

Paul Taylor
sumber
Bisakah Anda mencoba, pada kesalahan err, menampilkan dialog err, dan mencoba kode untuk mendapatkan laporan kembali dari mereka dengan lebih banyak data daripada nomor kesalahan?
jweaks
dapatkah Anda menunjukkan kepada saya bagaimana saya benar-benar tidak tahu Applescript
Paul Taylor
Sulit untuk menunjukkan kode dalam komentar. Anda benar-benar dapat google untuk contoh. Letakkan garis setelah 'dengan batas waktu' yang mengatakan: "coba" lalu sebelum 'batas waktu habis', masukkan tiga baris: "pada kesalahan err '' dialog tampilan err '' coba akhir '
jweaks
Saya melakukan apa yang Anda katakan dan membuatnya berlari lagi dan tampaknya benar-benar berfungsi tanpa kesalahan, yang tidak masuk akal. Saya akan melaporkan kembali ketika saya memiliki informasi lebih lanjut
Paul Taylor
@ jweaks Ive sekarang seperti yang Anda minta, skrip sebenarnya bekerja sekali tetapi sekarang gagal seperti sebelumnya tanpa info tambahan
Paul Taylor

Jawaban:

1

Seharusnya seperti ini:

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

Anda timeoutharus berada di dalam tellblok, bukan sebelum / di atas / di luarnya.

Sepertinya Anda mungkin mengatur batas waktu untuk skrip itu sendiri, bukan iTunes yang memiliki batas waktu default 120 detik (semua aplikasi memiliki batas waktu default 2 menit).

Ini bisa gagal karena sejumlah alasan selain batas waktu normal, seperti jika orang tersebut baru saja memutakhirkan iTunes, dan skrip Anda membukanya untuk pertama kali setelah baru diinstal, itu tidak akan dapat menjalankan fungsi iTunes normal sampai setelah menutup layar splash yang bertuliskan "Selamat datang di iTunes versi X - Lihat semua fitur baru !, dll."

Juga, sudah beberapa saat sejak saya bekerja dengan AppleScript, jadi saya tidak ingat apakah Anda memberi tahu atau tidak aplikasi sistem untuk melakukan sesuatu jika secara otomatis terbuka atau tidak. Jika tidak, itu mungkin, Anda mungkin perlu Tell SystemEvents to open application "ITunes"(atau apa pun sintaksnya) - atau Anda selalu dapat menggunakan do shellscriptperintah untuk membuka aplikasi, dalam hal ini perintah shell yang sebenarnya open /Applications/iTunes.app/- yang dapat Anda verifikasi di Terminal.

Kesalahan juga bisa terjadi jika aplikasi iTunes membutuhkan fokus GUI agar operasi ini dapat berlangsung dan aplikasi secara otomatis kehilangan fokus ketika skrip sedang dijalankan ketika aplikasi lain dibuka atau pengguna mengklik atau skenario semacam itu, yang skrip Anda harus dapat menjelaskan. Dalam kasus seperti ini, Anda mungkin ingin tell SystemEvents to activate application "iTunes"sebelum tindakan penting terjadi. Ini akan menyebabkan jendela iTunes mendapatkan kembali fokus.

Ini mungkin sebenarnya SystemEventsperintah yang sama ini (Anda mungkin perlu memeriksa / memperbaiki sintaks saya) yang awalnya membuka aplikasi jika belum dibuka pada saat skrip dijalankan.

rubynorails
sumber
ooh jika Anda benar tentang batas waktu yang akan lebih baik, saya telah mengirim skrip yang diubah ke pengguna untuk mencoba
Paul Taylor