Как дождаться добавления файла в iTunes в Applescript - PullRequest
0 голосов
/ 19 января 2020

У меня есть следующий AppleScript для добавления нового файла в iTunes

tell application "iTunes"
    launch
    set the_track_ref to add the_filename as POSIX file as alias
    -- delay 5 -- This prevents "Error: error in user parameter list (paramErr:-50)"
    set the_track to contents of the_track_ref
    set the name of the_track to the_track_name -- This sometimes results in "Error: error in user parameter list (paramErr:-50)"
    set the album of the_track to the_track_album
    set the artist of the_track to the_track_artist
    set the genre of the_track to the_track_genre
end tell

Добавляемый файл - это аудиофайл, обычно продолжительностью 2 часа. Когда я запускаю скрипт, я часто получаю ошибку Error: error in user parameter list (paramErr:-50) в строке set the name of the_track to the_track_name. Я предполагаю, что при копировании файла из временного местоположения в медиатеку iTunes возникает задержка, и the_track пока недоступен.

Как видите, я попытался добавить задержку в 5 секунд, но это все еще не предотвращает проблему. Я могу воссоздать проблему 50% -75% времени, запустив скрипт вручную. iTunes работает во время ошибки.

Я думаю, что я должен создать al oop после оператора add, чтобы дождаться импорта, чтобы быть действительным, но я не не знаю, что проверять.

1 Ответ

1 голос
/ 20 января 2020

Я не вижу прямого способа проверить, готов ли файл к обработке, но достаточно просто проверить на ошибку в al oop:

tell application "iTunes"
    launch
    set the_track_ref to add the_filename as POSIX file as alias
    set the_track to contents of the_track_ref
    repeat
        try
            set the name of the_track to the_track_name
            exit repeat
        on error errstr number errnum
            if errnum = -50 then
                delay 0.5
            else
                display alert "Error " & errnum & ": " & errstr
            end if
        end try
    end repeat
end tell

Если переименовать дорожку ошибки, l oop переходит в раздел ошибок. Если ожидаемая ошибка равна -50, то l oop задерживается на полсекунды и пытается снова; если возникает какая-либо другая ошибка, сценарий отображает диалоговое окно ошибки. Если переименование дорожки прошло успешно, сценарий выходит из l oop и продолжает обработку.

Вы можете поместить другие команды внутри блока try или после него, как считаете нужным. Я могу видеть плюсы и минусы в любом случае, в зависимости от типов ошибок, которые вы, вероятно, увидите.

...