如何在 Applescript 中等待文件添加到 iTunes

How to wait for a file to be added to iTunes in Applescript

我有以下 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 小时。当我 运行 脚本时,我经常在行 set the name of the_track to the_track_name 上得到错误 Error: error in user parameter list (paramErr:-50)。我的猜测是将文件从临时位置复制到 iTunes 库时出现延迟,并且 the_track 尚不可用。

如您所见,我已经尝试添加 5 秒的延迟,但这仍然不能解决问题。通过手动 运行 脚本,我可以在 50%-75% 的时间内重现问题。错误发生时,iTunes 正在 运行ning

我想我应该在 add 语句之后创建一个循环来等待导入有效,但我不知道要检查什么。

我没有看到任何直接的方法来测试文件是否准备好被处理,但是在循环中测试错误很容易:

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

如果重命名曲目出错,则循环跳转到错误部分。如果错误是预期的“-50”,则循环延迟半秒并重试;如果发生其他错误,脚本会显示一个错误对话框。如果重命名轨道成功,脚本将退出循环并继续处理。

您可以根据需要将其他命令放在 try 块内或之后。我可以看到任何一种方式的优缺点,具体取决于您可能会看到的错误类型。